Aprendendo como funciona o NHibernate Elvis Medeiros Programador .NET Conteúdo da Apresentação Porque usar Hibernate Como ele funciona Arquivos necessários para o Nhibernate Pontos Positivos Pontos Negativos Prática Referências Porque usar Hibernate GUI – Camada de Apresentação Classes-GUI Classes-Básicas Fachada – Camada de Negócio Classes-Cadastros Classes-Básicas Repositório – Camada de Dados Classes-Repositorios Classes-Básicas Persistência dos Objetos Objetos da Camada de Dados (Repositório) Hibernate Microsoft SQL Server 2005/2000 Oracle Microsoft Access Firebird PostgreSQL DB2 UDB MySQL SQLite Dados Arquivos Necessários Arquivo de Mapeamento. Arquivo de Configuração do NHibernate. API do NHibernate. Arquivo de Mapeamento Tabela: AVISO_INSCRICAO Arquivo de Mapeamento Public class AvisoInscricao { private int _id; private string _aviso_inscricaoname; private bool _deletado; ... public virtual int Id { get{ return _id;} set{isChanged |=(_id != value); _id = value;} } public virtual bool Deletado { get{ return _deletado;} set{isChanged |=(_deletado != value); _deletado = value;} } ... } Arquivo de Mapeamento <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="BVR_CPM_ClassesBasicas" namespace="BVR_CPM_ClassesBasicas" defaultlazy="false"> <class name="BVR_CPM_ClassesBasicas.AvisoInscricao,BVR_CPM_ClassesBasicas" table="CPM_AVISO_INSCRICAO"> <id name="Id" column="ID" type="Int32" unsaved-value="0"> <generator class="native" /> </id> <property column="AVISO_INSCRICAO" type="String" name="AvisoInscricaoName" not-null="true" length="2147483647" /> <property column="DELETADO" type="Boolean" name="Deletado" not-null="true" /> </class> </hibernate-mapping> Arquivo de Configuração using System; using System.Web; using System.Collections.Generic; using System.Reflection; using System.Text; using NHibernate; using NHibernate.Cfg; public sealed class NHibernateHelper { private const string CurrentSessionKey = "nhibernate.current_session"; private static readonly ISessionFactory sessionFactory; static NHibernateHelper() { sessionFactory = new Configuration().Configure().BuildSessio nFactory(); } public static ISession GetCurrentSession() { CloseSession(); HttpContext context = HttpContext.Current; ISession currentSession = context.Items[CurrentSessionKey] as ISession; } try { currentSession.Close(); } catch (Exception ex) { throw ex; } if (currentSession == null) { currentSession = sessionFactory.OpenSession(); context.Items[CurrentSessionKey] = currentSession; } context.Items.Remove(CurrentSessionKe y); return currentSession; } } public static void CloseSessionFactory() { if (sessionFactory != null) { sessionFactory.Close(); } } public static void CloseSession() { HttpContext context = HttpContext.Current; ISession currentSession = context.Items[CurrentSessionKey] as ISession; } if (currentSession == null) { // No current session return; Arquivo de Configuração <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" > <session-factory name="NHibernate.NHROWS"> <!-- properties --> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider </property> <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <property name="connection.connection_string">Data Source=SRV-DB;Initial Catalog=BVR_CPM_BASE; Persist Security Info=True;User ID=sa; password=Redes21220 </property> <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <!-- mapping files --> <mapping assembly="BVR_CPM_Repositorios" /> </session-factory> </hibernate-configuration> API do NHibernate Pontos Positivos/Negativos Positivos Separação do código em camadas. Tratamento contra SQL Injection. Abrange a maioria dos bancos de dados. Negativo Grande quantidade de código gerada, aumenta a chance de erros de código. Não é mais rápido do que uma consulta direto no banco. Amarração a coleção de objetos. Prática Referências http://www.macoratti.net/08/12/vbn_hib1.htm http://www.linhadecodigo.com.br/Artigo.aspx?id=546 http://www.linhadecodigo.com.br/Artigo.aspx?id=2140