140 likes | 295 Views
NHibernate. 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.
E N D
NHibernate 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
Persistência dos Objetos Objetos da Camada de Dados (Repositório) 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 PublicclassAvisoInscricao { privateint _id; private string _aviso_inscricaoname; privatebool _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" default-lazy="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; usingNHibernate; usingNHibernate.Cfg; publicsealedclassNHibernateHelper { privateconst string CurrentSessionKey = "nhibernate.current_session"; privatestaticreadonlyISessionFactorysessionFactory; staticNHibernateHelper() { sessionFactory = newConfiguration().Configure().BuildSessionFactory(); } publicstaticISessionGetCurrentSession() { CloseSession(); HttpContextcontext = HttpContext.Current; ISessioncurrentSession = context.Items[CurrentSessionKey] as ISession; if (currentSession == null) { currentSession = sessionFactory.OpenSession(); context.Items[CurrentSessionKey] = currentSession; } returncurrentSession; } publicstaticvoidCloseSession() { HttpContextcontext = HttpContext.Current; ISessioncurrentSession = context.Items[CurrentSessionKey] as ISession; if (currentSession == null) { // No currentsession return; } try { currentSession.Close(); } catch (Exception ex) { throw ex; } context.Items.Remove(CurrentSessionKey); } publicstaticvoidCloseSessionFactory() { if (sessionFactory != null) { sessionFactory.Close(); } } }
Arquivo de Configuração <?xml version="1.0" encoding="utf-8" ?> <hibernate-configurationxmlns="urn:nhibernate-configuration-2.2" > <session-factoryname="NHibernate.NHROWS"> <!-- properties --> <propertyname="connection.provider">NHibernate.Connection.DriverConnectionProvider </property> <propertyname="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <propertyname="connection.connection_string">Data Source=SRV-DB;InitialCatalog=BVR_CPM_BASE; PersistSecurityInfo=True;User ID=sa; password=Redes21220 </property> <propertyname="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <!-- mapping files --> <mappingassembly="BVR_CPM_Repositorios" /> </session-factory> </hibernate-configuration>
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.
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