NHibernate

Propaganda
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
Download