Você está na página 1de 5

10/02/13

Verso para impresso: Desenvolvendo aplicaes com NHibernate Parte II

www.de vm e dia.com .br

[ve rso para im pre sso]

Desenvolvendo aplicaes com NHibernate Parte II

No artigo anterior preparamos o ambiente de desenvolvimento instalando softwares, criando banco de dados e gerando os arquivos Cs e Hbml.xml...

Desenvolvendo aplicaes com NHibernate Parte II


No artigo anterior preparamos o ambiente de desenvolvimento instalando softwares, criando banco de dados e gerando os arquivos Cs e Hbml.xml, agora chegou hora da codificao da tela, como podemos visualizar na Figura 1.

Figura 1 Formulrio de Cadastro de Empresa Acredito que todos os componentes e controles so conhecidos sendo que o que merece uma observao o BSEmpresa (BindingSource) que veremos logo em seguida. Esta tela possui um TabControl que contm em uma pgina um PictureBox para informao da imagem do Logotipo e na outra um DataGridView para visualizao de todos os registros da tabela. Para este form teremos tambm algumas variveis que podem ser visualizadas na Listagem 1. C o n f i g u r a t i o nc f g ; I S e s s i o n F a c t o r yf a c t o r y ; I S e s s i o ns e s s i o n ; I T r a n s a c t i o nt r a n s a c t i o n ;
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942 1/5

10/02/13

Verso para impresso: Desenvolvendo aplicaes com NHibernate Parte II

E m p r e s ae m p r e s a ; Listagem 1 Variveis do Formulrio A varivel cfg ser responsvel por carregar todos os arquivos hbml.xml que esto no resource do projeto. J a varivel factory ser responsvel por carregar as informaes que definimos no App.Config como a string de conexo, qual tipo do Banco de Dados e outras informaes que estejam presentes neste arquivo. Atravs desta varivel ser gerada uma sesso que ser armazenada pela varivel session e que por sua vez ir gerar uma transao sendo armazenada na varivel transaction. Todo este procedimento que foi descrito sobre as responsabilidades de cada varivel iremos coloclo no evento Load do nosso formulrio como mostra a Listagem 2. c f g=n e wC o n f i g u r a t i o n ( ) ; c f g . A d d A s s e m b l y ( t h i s . G e t T y p e ( ) . A s s e m b l y ) ; f a c t o r y=c f g . B u i l d S e s s i o n F a c t o r y ( ) ; s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; t r a n s a c t i o n=s e s s i o n . B e g i n T r a n s a c t i o n ( ) ; / / R e c u p e r a n d ou m aL i s t ad eR e g i s t r o s R e f r e s h D a t a ( ) ; d a t a G r i d V i e w 1 . D a t a S o u r c e=B S E m p r e s a ; d a t a G r i d V i e w 1 . C o l u m n s [ " C o d e m p " ] . H e a d e r T e x t=" C d i g o " ; d a t a G r i d V i e w 1 . C o l u m n s [ " C o d e m p " ] . D i s p l a y I n d e x=0 ; d a t a G r i d V i e w 1 . C o l u m n s [ " R a z S o c " ] . H e a d e r T e x t=" R a z oS o c i a l " ; d a t a G r i d V i e w 1 . C o l u m n s [ " R a z S o c " ] . D i s p l a y I n d e x=1 ; d a t a G r i d V i e w 1 . C o l u m n s [ " R a z S o c " ] . A u t o S i z e M o d e=D a t a G r i d V i e w A u t o S i z e C o l u m n M o d e . F i l l ; d a t a G r i d V i e w 1 . C o l u m n s [ " N o m e f a n " ] . H e a d e r T e x t=" N o m eF a n t a s i a " ; d a t a G r i d V i e w 1 . C o l u m n s [ " N o m e f a n " ] . D i s p l a y I n d e x=2 ; d a t a G r i d V i e w 1 . C o l u m n s [ " N o m e f a n " ] . A u t o S i z e M o d e=D a t a G r i d V i e w A u t o S i z e C o l u m n M o d e . F i l l ; d a t a G r i d V i e w 1 . C o l u m n s [ " E n d e r e c o " ] . H e a d e r T e x t=" E n d e r e o " ; d a t a G r i d V i e w 1 . C o l u m n s [ " E n d e r e c o " ] . D i s p l a y I n d e x=3 ; d a t a G r i d V i e w 1 . C o l u m n s [ " E n d e r e c o " ] . A u t o S i z e M o d e= D a t a G r i d V i e w A u t o S i z e C o l u m n M o d e . F i l l ; d a t a G r i d V i e w 1 . C o l u m n s [ " I s C h a n g e d " ] . V i s i b l e=f a l s e ; d a t a G r i d V i e w 1 . C o l u m n s [ " I s D e l e t e d " ] . V i s i b l e=f a l s e ; t x t c o d i g o . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," c o d e m p " ) ; t x t r a z a o . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," r a z s o c " ) ; t x t e n d e r e c o . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," e n d e r e c o " ) ; t x t n o m e f a n . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," n o m e f a n " ) ; p i c l o g o . D a t a B i n d i n g s . A d d ( " I m a g e " ,B S E m p r e s a ," l o g o t i p o " , t r u e ) ; Listagem 2 Inicializando variveis e configurando controles Alm de iniciarmos as variveis para a persistncia de dados tambm configuramos os controles. O mtodo RefreshData utilizado neste evento responsvel por carregar todos os registros da tabela Empresa, como mostrado na Listagem 3.

www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942

2/5

10/02/13

Verso para impresso: Desenvolvendo aplicaes com NHibernate Parte II

v o i dR e f r e s h D a t a ( ) { / / R e c u p e r a n d ou m aL i s t ad eR e g i s t r o s s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; I C r i t e r i ac r i t e r i a=s e s s i o n . C r e a t e C r i t e r i a ( t y p e o f ( E m p r e s a ) ) ; I L i s tu s e r L i s t=c r i t e r i a . L i s t ( ) ; B S E m p r e s a . D a t a S o u r c e=u s e r L i s t ; i f( u s e r L i s t . C o u n t= =0 ) B S E m p r e s a . D a t a S o u r c e=n e wE m p r e s a ( ) ; } Listagem 3 Mtodo RefreshData No mtodo RefreshData podemos observar que a propriedade DataSource do BindingSource recebe como resultado o IList de todos os dados recuperados que uma coleo do tipo Empresa. A diferena de se utilizar o BindingSource que ns podemos ligar os controles de tela com as propriedades da classe automaticamente, ficando assim mais fcil recuperar os valores do Banco de dados e mostr-los na tela ou recuperar os valores da tela para gravar o Banco de Dados. Sem o BindingSource teramos que criar um objeto do tipo Empresa, recuperar os valores da tela e coloc-los nos campos respectivos do objeto para realizar a gravao. Com o BindingSource esta parte automtica. Para a gravao dos dados o cdigo bem simples como pode ser visto na Listagem 4. i f( M e s s a g e B o x . S h o w ( " D e s e j ag r a v a ro sd a d o sn oB a n c od eD a d o s ? " , " A t e n o ! " ,M e s s a g e B o x B u t t o n s . Y e s N o ,M e s s a g e B o x I c o n . Q u e s t i o n )= =D i a l o g R e s u l t . N o ) r e t u r n ; B S E m p r e s a . E n d E d i t ( ) ; e m p r e s a=( E m p r e s a ) B S E m p r e s a . C u r r e n t ; f a c t o r y=c f g . B u i l d S e s s i o n F a c t o r y ( ) ; s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; t r a n s a c t i o n=s e s s i o n . B e g i n T r a n s a c t i o n ( ) ; t r y { i f( e m p r e s a . C o d e m p>0 ) s e s s i o n . U p d a t e ( e m p r e s a ) ; e l s e s e s s i o n . S a v e ( e m p r e s a ) ; t r a n s a c t i o n . C o m m i t ( ) ; R e f r e s D a t a ( ) ; } C a t c h { M e s s a g e B o x . S h o w ( " E r r oa oa t u a l i z a roB a n c od ed a d o s ! " ," E r r o ! " , M e s s a g e B o x B u t t o n s . O K ,M e s s a g e B o x I c o n . E r r o r ) ; t r a n s a c t i o n . R o l l b a c k ( ) ; } f i n a l l y { s e s s i o n . C l o s e ( ) ; } Listagem 4 Cdigo para a gravao dos dados
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942 3/5

10/02/13

Verso para impresso: Desenvolvendo aplicaes com NHibernate Parte II

Resumindo este cdigo podemos dizer que recuperamos no BindingSource o registro corrente, que na verdade um objeto do tipo Empresa e setamos na nossa varivel do tipo empresa. Abrimos uma sesso e iniciamos uma transao para a gravao do registro. Aps este ponto temos que verificar se estamos alterando ou adicionando um novo registro, utilizei a propriedade CodEmp devido a mesma ser um campo auto-incremento pois s ter seu valor atualizado quando o registro for salvo no Banco de Dados, sendo assim foi possvel determinar quando executar o mtodo Save ou o mtodo Update. Para o cdigo de excluso de dados a nica coisa que ser alterada o mtodo Delete da varivel session como pode ser visto na Listagem 5. i f( M e s s a g e B o x . S h o w ( " D e s e j ae x c l u i re s t er e g i s t r od oB a n c od eD a d o s ? " , " A t e n o ! " ,M e s s a g e B o x B u t t o n s . Y e s N o ,M e s s a g e B o x I c o n . Q u e s t i o n )= =D i a l o g R e s u l t . N o ) r e t u r n ; B S E m p r e s a . E n d E d i t ( ) ; e m p r e s a=( E m p r e s a ) B S E m p r e s a . C u r r e n t ; f a c t o r y=c f g . B u i l d S e s s i o n F a c t o r y ( ) ; s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; t r a n s a c t i o n=s e s s i o n . B e g i n T r a n s a c t i o n ( ) ; t r y { s e s s i o n . D e l e t e ( e m p r e s a ) ; t r a n s a c t i o n . C o m m i t ( ) ; R e f r e s D a t a ( ) ; } c a t c h { M e s s a g e B o x . S h o w ( " E r r oa oa t u a l i z a roB a n c od ed a d o s ! " ," E r r o ! " , M e s s a g e B o x B u t t o n s . O K ,M e s s a g e B o x I c o n . E r r o r ) ; t r a n s a c t i o n . R o l l b a c k ( ) ; } f i n a l l y { s e s s i o n . C l o s e ( ) ; } Listagem 5 Cdigo de excluso de Dados Como vocs podem reparar no utilizamos nenhum comando SQL, nem para recuperar os dados nem para grav-los ou exclu-los. Esta uma das grandes vantagens de se utilizar a persistncia de dados. H muito para ser explorado neste framework como a execuo de comandos SQL, trabalhar com tabelas que possuem relacionamento dentre outras. Espero ter ajudado vocs a conhecerem um pouco mais sobre este framework e at o prximo artigo.

por JHONATAN FERNANDO


Jhonatan Fernando (jhonatanfernando@yahoo.com.br), Bacharel em Cincia da Computao pela Universidade de Itana/MG. Experincia com desenvolvimento de aplicaes para Gesto Empresarial utilizando a IDE Delphi 7.0. Atualmente como Analista de Sistema/Desenvolvedor C# desenvolvendo aplicaes para Pocket PC e WindowsForms utilizando a tecnologia Dot.Net.

www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942

4/5

10/02/13

Verso para impresso: Desenvolvendo aplicaes com NHibernate Parte II

www.devmedia.com.br/articles/viewcomp.asp?comp=6942

www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942

5/5

Você também pode gostar