ASP NET MVC + NHibernate + ExtJs – Parte 3

Seguindo nosso tutorial, hoje vamos fazer a conexão entre o NHibernate e o nosso banco de dados Postgres, para isso temos que fazer o download do NHibernate, estou usando a versão 2.1.2, e depois descompactar o arquivo.

Vamos criar um diretório chamado Lib no mesmo nível onde se encontra a solution do Visual Studio, esse diretório  vamos colocar todas as dlls que vamos utilizar, veja abaixo a hierarquia de diretórios.

Agora temos que copiar as seguintes dlls para dentro desse diretório, essas dlls podem ser encontradas dentro da pasta NHibernate-2.1.2.GA-bin\Required_Bins que baixamos anteriormente:

Para testar a conexão com o banco de dados Postgres vamos criar um projeto de testes, então clique com o botão direito em cima da solution -> Add -> New Solution Folder e coloque o nome de Testes

Agora temos que adicionar um novo projeto de teste, clicar com o botão direito em cima da pasta Testes e selecionar a opção Add -> New Project depois do lado esquerdo selecione Visual c# -> Test e do lado direito selecione o projeto Test Project, abaixo coloque o nome de Contatos.Factory.Teste

Agora temos que criar o arquivo hibernate.cfg.xml que será responsável por configurar as opções para conectar no banco de dados, clique com o botão direito em cima do projeto Contatos.Factoty.Testes selecionar a opção Add -> New Item após selecionar do lado esquerdo a opção Visual C# -> Data, do lado direito selecione a opção XML File e coloque o nome de hibernate.cfg.xml

Depois de criado o arquivo temos que adicionar as configurações, veja abaixo a configuração para o Postgres.

[sourcecode language=”xml”]
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider"> NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect"> NHibernate.Dialect.PostgreSQL81Dialect</property>
<property name="connection.driver_class"> NHibernate.Driver.NpgsqlDriver</property>
<property name="connection.connection_string"> server=localhost;port=5432;database=contatos;uid=postgres;pwd=123456</property>
<property name="proxyfactory.factory_class"> NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
[/sourcecode]

Essa é a configuração padrão, o que vai mudar para os diversos bancos de dados que o NHibernate suporta, é o conteúdo de cada propriedade dessa.

Aqui tem um detalhe que não podemos esquecer, temos que mudar a propriedade Copy to Output Directory do arquivo de configuração, então clique com o botão direito em cima do arquivo hibernate.cfg.xml e selecione propriedades, na opção Copy to Output Directory mude para Copy Always.

Agora vamos adicionar um novo teste, para isso clique com o botão direito em cima do nosso projeto de teste Contatos.Factory.Teste e selecione a opção Add -> New Test, depois selecione a opção Unit Test e coloque o nome de ConexaoNHibernateTeste.cs

Agora vamos criar dois testes, um para criar o script para criação da base, e outro que executa a criação na base. Mas primeiramente temos que adicionar as referências das bibliotecas que vamos usar, clique com o botão direito em cima do projeto de teste e selecione Add Reference.

Uma nova janela se abrirá, selecione Browse e navegue até o diretório Lib que criamos no início desse post, selecione as DLLs e depois clique no botão OK.

Também adicione uma refência ao projeto Contatos.Factory, clique em Add Reference, selecione Projects e adicione o projeto Contatos.Factory

Depois de adicionado as referências vamos criar o dois métodos no projeto de teste,  veja abaixo o código:

[sourcecode language=”csharp”]
/// <summary>
/// Criar o script do banco de dados
/// </summary>
[TestMethod]
public void GerarScript()
{
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(TipoTelefone).Assembly);

var schemaExport = new SchemaExport(cfg);
schemaExport.Create(true, false);
}

/// <summary>
/// Criar as tabelas no banco de dados
/// </summary>
[TestMethod]
public void GerarDataBase()
{
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(TipoTelefone).Assembly);

var schemaExport = new SchemaExport(cfg);
schemaExport.Create(true, true);
}
[/sourcecode]

Antes de executar os testes, a única coisa que temos fazer, é criar a database Contatos no banco de dados.

Agora podemos executar os métodos de teste, primeiramente execute o método GerarScript vemos que o NHibernate vai ler todos os nossos mapeamentos (arquivos hbm que se encontra no projeto Contatos.Factory) e gera o script SQL. Veja que o NHibernate cria todas as sequences, chaves primárias, chaves estrangeiras, tabelas associativas que configuramos anteriormente, por esse motivo é muito importante criar os mapemanetos corretos para que nosso banco também fique correto.

Depois de verificar o script e validar que todas as tabelas, PKs, FKs estão corretas, podemos excutar na base, execute o método GerarDataBase, a saída do teste será o mesmo, o script SQL, porém se verificarmos na base as nossas tabelas foram criadas.

Nessa Parte 3 vimos como configurar e gerar uma base através no NHibernate, no próximo post vamos criar o CRUD.

Download Parte 3

Até a proxima!

Sobre Leandro Prado

Leandro Silveira Prado é Premier Field Engineer na Microsoft especializado em Application Lifecycle Management.