NHibernate - ORM
Antes de realmente começarmos a usar o NHibernate, precisamos entender a base sobre a qual ele foi construído. NHibernate é uma tecnologia de persistência que se baseia na ideia de mapeamento relacional de objetos ou ORM.
O que é ORM?
Mapeamento Objeto-Relacional (ORM) é um programming techniquepara converter dados entre sistemas de tipos incompatíveis em linguagens de programação orientadas a objetos. Em outras palavras, é o conceito de mapear os objetos de negócios de um aplicativo para tabelas de banco de dados relacionais, de modo que os dados possam ser facilmente acessados e atualizados inteiramente por meio do modelo de objeto de um aplicativo.
Como você já sabe, os bancos de dados relacionais fornecem um bom meio de armazenamento de dados, enquanto a programação orientada a objetos é uma boa abordagem para construir aplicativos complexos.
NHibernate e ORM em geral são mais relevantes para aplicativos com lógica de negócios não trivial, o modelo de domínio e algum tipo de banco de dados.
Com ORM, é muito fácil criar uma camada de tradução que pode transformar objetos em dados relacionais e vice-versa.
O acrônimo ORM também pode significar modelagem de função de objeto, e este termo foi inventado antes que o mapeamento objeto / relacional se tornasse relevante.
Ele descreve um método para análise de informações, usado na modelagem de banco de dados.
Por que ORM?
ORM é um framework que permite mapear o mundo dos objetos encontrados em linguagens orientadas a objetos para linhas em tabelas relacionais encontradas em bancos de dados relacionais
Para entender esse conceito, vamos dar uma olhada no diagrama a seguir.
No diagrama acima, você pode ver que temos uma tabela chamada Funcionário no lado direito que contém colunas com cada dado associado a um funcionário individual.
Temos uma coluna para um Id que identifica exclusivamente cada funcionário.
Uma coluna para o nome do funcionário, outra coluna para a data de ingresso e, finalmente, uma coluna com a idade de um funcionário.
Se quiséssemos escrever algum código para armazenar um novo funcionário nas tabelas, não é tão fácil.
No diagrama acima, você também pode ver que temos um objeto funcionário que possui campos para Id, nome, data de ingresso e idade.
Sem um ORM, temos que traduzir este objeto em algumas instruções SQL diferentes que irão inserir os dados do funcionário na tabela de funcionários.
Portanto, escrever código para criar o SQL para fazer o cenário acima não é tão difícil, mas é um pouco tedioso e muito fácil errar.
Usando um ORM como o NHibernate, podemos declarar como certas classes devem ser mapeadas para tabelas relacionais e deixar o ORM ou NHibernate lidar com o trabalho desagradável de criar o SQL para inserir, atualizar, excluir, em dados de consulta em nossa tabela de funcionários.
Isso nos permite manter nosso código focado no uso de objetos e ter esses objetos convertidos automaticamente em tabelas relacionais.
Então, o que um ORM realmente faz é nos poupar de ter que mapear objetos manualmente para tabelas.