 C#
- Usando o NHibernate 2.1 com SharpDevelop 3.1 e MySQL/SQL Server
C#
- Usando o NHibernate 2.1 com SharpDevelop 3.1 e MySQL/SQL Server
|  | Neste artigo eu estou voltando a falar sobre o NHibernate (gostei do danado), desta vez usando a linguagem C# e o SharpDevelop 3.0, se bem que o projeto também pode ser carregado no Visual C# 2008 Express Edition. | 
Eu já escrevi os seguintes artigos a respeito:
VB .NET - Usando o NHibernate - Apresenta a utilização do NHibernate com o VB .NET;
NHibernate -Efetuando o mapeamento
XML - Mostra
exemplos de mapeamentos;
.NET - NHibernate a revanche - Gerando os arquivos de mapeamento
com o MyGeneration;
NHibernate - Usando o ActiveRecord I - Ganhando
produtividade com o NHibernate (3 artigos);
Neste artigo eu vou usar o NHibernate na sua forma tradicional , gerando os arquivos de configuração e mapeamento via código e sem ajudas de ferramentas. Estou fazendo isso para você entender como o NHibernate funciona, depois você pode usar a ferramenta que desejar para ter mais produtividade mas vai estar entendendo o que esta por trás dos panos.
Eu vou usar a última versão disponível do NHibernate, a versão 2.1.2 que pode ser obtida neste link: http://sourceforge.net/projects/nhibernate/
O SharpDevelop 3.1 pode ser obtido aqui: http://www.icsharpcode.net/OpenSource/SD/Download/#SharpDevelop3x
Obs: Se quiser usar o Visual C# 2008 pegue o danado aqui: http://www.microsoft.com/express/vcsharp/
Eu vou criar um exemplo que vai usar dois banco de dados relacionais o SQL Server e o MySQL e portanto você deverá ter instalado os seguintes recursos:
Apesar da quantidade de download
você não deve reclamar pois é tudo grátis.
A instalação dos pacotes acima é bem simples e de forma padrão os arquivos são instalados na pasta c:\Arquivos de Programas\
Agora eu vou explicar o que eu pretendo mostrar neste artigo:
A primeira tarefa é criar um banco de dados chamado alomundo e uma tabela chamada empregado no SQL Server e no MySQL. Como o objetivo do artigo não é mostrar como criar o banco de dados eu vou dar as definições de cada tabela para que você mesmo crie as tabelas. Seguem as instruções:
| 
 | Estrutura da tabela
        empregado: 
		- id
        - chave primária - | ||||||||||||
| A tabela empregado
        expressa que cada empregado possui um id
        para identificação , um nome e um gerente; Onde gerente é um campo inteiro que representa o código de identificação de um gerente. | |||||||||||||
Abaixo eu mostro a estrutura das tabelas criadas no MySQL e no SQL Server Express:
|  | 
| Tabela empregado criada no MySQL Admnistrator | 
|  | 
| Tabela empregado criada no SQL Server Express | 
A estrutura da tabela foi definida com uma estrutura bem simples para facilitar a elaboração do exemplo focado no recurso NHibernate.
Estando com todos os recursos
instalados e funcionando e com o banco de dados e tabela criados
no SQL Server 2008 Express e no MySQL você pode continuar.
Havendo qualquer erro verifique e corrija pois caso contrário o
exemplo não vai funcionar e você vai ficar perdido.
Criando o projeto no SharpDevelop
Abra o SharpDevelop e crie um novo projeto através do menu Arquivo->Novo->Solução;
Na janela Novo Projeto selecione :
|  | 
E clique no botão Criar.
Com isso você terá a solução NHibernate_AloMundo criada.
A primeira coisa a fazer e criar uma classe POCO (plain old CLR objects) que vai representar o domínio do nosso negócio, ou seja, a tabela empregado pois o nosso interesse esta em gerenciar empregados, consultando, incluindo, alterando e excluindo-os da nossa base de informação.
Para representar o nosso domínio vamos criar uma classe chamada Empregado em um arquivo Empregado.cs.
Para criar o arquivo selecione o menu Projeto->Adicionar->Novo Item e na janela Novo Arquivo defina:
|  | 
Ao final clique no botão Criar.
Agora defina a classe Empregado conforme o código abaixo:
| using System;
namespace NHibernate_AloMundo
{
	/// <summary>
	/// Description of Empregado.
	/// </summary>
	public class Empregado
	{
		public int id;
		public string nome;
		public Empregado gerente;
		
		public string empregadoID()
		{
			return string.Format(id + " - " + nome);
		}
	}
} | 
Esta nossa classe possui 3 campos : id, nome e gerente definidas como públicas (public) ( eu sei , eu deveria usar propriedades privadas(private) , mas eu deixei as boas práticas um pouco de lado para tonar nosso exemplo mais fácil (MENOS CÓDIGO), ok. Então deixe como está e lembre-se de NUNCA fazer a mesma coisa na definições das suas classes.)
O id é o campo identificador e permite a nossa aplicação acessar o campo chave primária identidade no banco de dados de um objeto persistente. Se duas instâncias da classe Empregado tiverem o mesmo valor para o identificador elas representam a mesma linha no banco de dados.
A classe também possui um método público chamado empregadoID que retorna o id e o nome do empregado.
Dessa forma instâncias da classe Empregado poderão ser gerenciadas e persistidas pelo NHibernate note que a classe não possui nada de especial e pode ser usada como uma classe comum.
Neste momento temos a nossa tabela empregado e a nossa classe empregado. Os dois recursos estão separados por um rio chamado impedância objeto/relacional e precisamos definir um recurso para o NHibernate saber como eles estão relacionados.
Precisamos portando vincular dois mundos : o mundo dos SGBDs relacionais (a nossa tabela) e o mundo dos Objetos (a nossa classe).
Quem faz esse papel são os arquivos de mapeamento e quase sempre devemos ter um arquivo para cada classe do nosso domínio. Estes arquivos possuem a nomenclatura: nome_da_classe.hbm.xml
No nosso exemplo teremos então um único arquivo de mapeamento chamado : Empregado.hbm.xml
Agora vamos criar o arquivo XML de mapeamento para o NHibernate saber como gerenciar e persistir os objetos relacionados com a tabela do banco de dados.
Para criar o arquivo selecione o menu Projeto->Adicionar->Novo Item e na janela Novo Arquivo defina:
|  | 
Para encerrar clique no botão Criar.
A seguir defina o seguinte conteúdo no arquivo XML:
| <?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<class name="NHibernate_AloMundo.Empregado, NHibernate_AloMundo" lazy="false">
  <id name="id" access="field">
     <generator class="native" />
   </id>
   <property name="nome" access="field" column="nome"/>
   <many-to-one access="field" name="gerente" column="gerente" cascade="all"/>
</class>
</hibernate-mapping> | 
Veja abaixo o mesmo arquivo no editor SharpDevelop e note que existe uma definição importante que você deve fazer.
Na janela Propriedades do arquivo, em Construir Ação você deve definir o valor : EmbeddedResource;
|  | 
Obs: Se você estiver usando uma versão anterior do NHibernate a sintaxe pode ser diferente, principalmente na definição do arquivo de mapeamento.
O arquivo de mapeamento criado informa ao NHibernate o seguinte:
O arquivo de mapeamento é fácil de manter e entender e existem ferramentas que geram estes arquivos conforme você poderá verificar em meus artigos nas referências.
Acompanhe a segunda parte em : C# - Usando o NHibernate 2.1 com SharpDevelop 3.1 e MySQL/SQL Server
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? | 
Referências:
José Carlos Macoratti