NHibernate - Visão geral
Neste capítulo, discutiremos sobre o que é o NHibernate, em quais plataformas ele pode ser implementado, quais são suas vantagens e outros aspectos relacionados a ele.
O que é NHibernate?
NHibernate é um mapeador objeto-relacional de código aberto maduro para a estrutura .NET. É ativamente desenvolvido, com recursos completos e usado em milhares de projetos de sucesso. É construído em cima deADO.NET e a versão atual é NHibernate 4.0.4.
NHibernate é um mapeador objeto-relacional de código aberto .NET e é distribuído sob o GNU Lesser General Public License.
Ele é baseado no Hibernate, que é um mapeador relacional de objeto Java popular e tem uma base de código muito madura e ativa.
Ele fornece uma estrutura para mapear um modelo de domínio orientado a objetos para um banco de dados relacional tradicional.
NHibernate foi iniciado por Tom Barrett e esse projeto existe desde fevereiro de 2003, quando foi o primeiro commit.
É um grande projeto e oferece muitas funcionalidades.
Existe um NuGet package disponível, o que torna muito fácil adicionar a um projeto.
Por que NHibernate?
Agora a questão é por que precisamos object-relational mappers? É porque há uma desconexão entre o mundo do objeto e o mundo relacional.
No mundo do objeto, tudo é baseado em objects; chamamos de objetos aquelas coisas que contêm nossos dados.
O mundo relacional é todo baseado em conjuntos e estamos lidando com tabelas e linhas que são diferentes do mundo do objeto.
No mundo do objeto, temos unidirectional associations. Se um cliente tem um ponteiro para um pedido, isso não significa necessariamente que um pedido tem um ponteiro de volta para um cliente, pode ou não.
No mundo relacional, todas as associações são bidirectional e isso pode ser feito por uma chave estrangeira.
Todas as associações são inerentemente bidirecionais, portanto, quando estamos lidando com mapeamento relacional de objetos, também precisamos lidar com essa desconexão.
No mundo dos objetos, estamos trabalhando com ponteiros que são unidirecionais, enquanto no mundo relacional, temos chaves estrangeiras que são inerentemente bidirecionais.
O mundo do objeto tem essa noção de herança, onde um veículo pode ter várias subclasses diferentes, então um carro é um tipo de veículo, um barco é um tipo de veículo e um carro esporte é um tipo de carro, esses tipos de relações de herança.
O mundo relacional não tem essa noção de herança.
Mapeamento
Então, como mapeamos todos esses disjoint relationships?Este conceito de mapeamento vem do mapeador relacional de objetos. Existem basicamente três coisas para entender, conforme mostrado no diagrama a seguir.
Em seu aplicativo, você precisará de definições de classe, que normalmente é o código C # e seu código .NET que representa nossas classes, como classe Employee, classe Customer, classe Order, etc.
Na parte inferior, você pode ver um esquema de banco de dados, que é o nosso Data Definition Language em um banco de dados relacional que especifica a aparência de uma tabela de clientes, a aparência de uma tabela de funcionários.
Entre eles, temos os metadados de mapeamento que informam ao mapeador relacional de objetos como traduzir do mundo do objeto em C # para o mundo do banco de dados em termos de linhas e colunas e relacionamentos de chave estrangeira.
Esses metadados de mapeamento podem ser representados em uma variedade de maneiras diferentes e veremos várias dessas maneiras diferentes, mais comuns no aplicativo NHibernate.
É representado por HBM (Hibernate Mapping) arquivos, que são arquivos XML.
Suporte de banco de dados
NHibernate oferece suporte a uma ampla variedade de bancos de dados diferentes. Qualquer banco de dados relacional existente pode ser acessado pelo NHibernate.
O servidor SQL é o principal banco de dados suportado, é o que a maioria dos desenvolvedores está usando durante o desenvolvimento, provavelmente é o mais comum.
Isso também works very well with Oracle.
Também suporta DB2, Firebird, MySQL, PostgreSQL, SQL Lite
Também tem ODBC and OLEDB drivers.