Uma nova abordagem de mapeamento objeto-relacional é o POCO (Plain Old CLR Object), que permite a utilização de nossas próprias classes como entidades dentro do modelo de mapeamento. Esta abordagem preza a utilização de classes simples, que não façam referência a frameworks especializados, que não dependam de soluções de terceiros, que não implementem nenhuma interface especial e que não dependam de nenhuma hierarquia de namespace.
O ADO.Net POCO Entity Generator é um template do Visual Studio 2010 que auxilia na construção de projetos que adotem o POCO criando entidades a partir de um modelo de dados. Neste post veremos quais os passos necessários para adoção desta técnica em projetos e como utilizar este template do Visual Studio 2010.
1 – Crie a tabela Person no banco de dados, conforme o script SQL abaixo:
2 – Crie uma solution no Visual Studio 2010 em branco.
3 – Adicione dois projetos Class Library a solution, a estes novos projetos atribua os nomes Data e Entities.
4 – Selecione o projeto Data e adicione um novo item utilizando o template ADO.Net Entity Data Model. No exemplo, criei com o nome dbModel.edmx. Este item é aquele comumente utilizado para adições de mapeamentos objeto-relacionais através do Entity Framework. Nas telas seguintes devem ser definidas: a conexão com o banco de dados e as tabelas que serão mapeadas. Neste exemplo apenas mapeei a tabela Person.
5 – Após fazer o mapeamento utilizando o Entity Framework, será preciso instalar o template ADO.Net POCO Entity Generator (caso o mesmo não esteja instalado). Clique em “Tools/Extension Manager”, selecione a aba Online Gallery e na caixa de pesquisa (localiza no canto superior direito) e pesquise por “T4”. Após a exibição dos resultados, instale os templates: “ADO.Net C# POCO Entity Generator” e “ADO.Net C# Web Site POCO Entity Generator” (caso a sua linguagem preferida seja VB.Net, então instale os templates próprios para a mesma, eles também estão disponíveis no resultado da consulta feita anteriormente).
6 – Após o download dos templates, volte a ferramenta de mapeamento, clique com o botão direito sobre uma das entidades mapeadas e seleciona a opção “Add Code Generation Item”.
7 – Adicione um novo item utilizando o template ADO.Net POCO Entity Generator. Neste exemplo atribui o nome “ModelPoco.tt”.
8 – Serão criados dois arquivos “ModelPoco.Context.tt” e “ModelPoco.tt”. O arquivo “ModePoco.tt” constrói as entidades, enquanto que o arquivo “ModelPco.Context.tt” gera o contexto tipado. Mova o arquivo “ModePoco.tt” Para o projeto Entities, a fim deixar o projeto classe projeto com suas respectivas responsabilidades separadas, sendo: Data, com acesso aos dados e o Entities, representando as entidades. Adicione no projeto Data referência para o projeto Entities.
9 – Dentro de “Modelo.tt”, na linha 22, altere o caminho do arquivo de mapeamento do Entity Framework para “..\Data\dbModel.edmx”. Isso fará com que a geração das entidades aponte para o arquivo correto, já que mudamos o arquivo de projeto.
Dentro de “ModelPoco.Context.tt”, vá até a linha 44, adicione uma referência para Entities, para que a geração de estruturas POCO possa identificar os tipos de dados utilizados no contexto.
Acesse as propriedades do arquivo “ModelPoco.tt” e altere a propriedade Custom Tool Namespace para “Entities”, faça o mesmo para o arquivo “ModelPoco.Context.tt”, mas modifique o valor da propriedade Custom Tool Namespace para “Data”. Esse passo é importante para que a geração de dados seja feita utilizando os namespaces previstos.
10 – Para testar o código, dentro da solution, crie um novo projeto utilizando o template Console Application. Dentro deste novo projeto faça referência as DLLs: Data, Entities e System.Data.Entity. Copie o arquivo “App.Config” que está localizado no projeto Data para este novo projeto, este passo é importante pois a string de conexão está localizada no mesmo.
11 – Para inserir novos registros utilize o código a seguir:
12 – Para consultar dados da base de dados utilize o código a seguir:
[]s! e até o próximo…
Por
Fernando Henrique Inocêncio Borba Ferreira.
Fala FH!
Da hora o post heim mano, fiz o exemplo e deu certinho 🙂
Já ouço falar em POCO faz um tempo já, em RoR o pessoal usa aos montes.
Parabéns…
[]’s!
Aeee mano! =]
Sim, POCO é animal…
To preparando outro post sobre POCO e Entity Framework Code First…
É outra parada maneira… e que eu até prefiro ao trabalhar com POCO…
Mas ainda eh CTP, não tem uma versão final definida…
RoR eu nunca ouvi falar =]
Não sei oq eh…
[]s!
Os nome das propriedade será os nomes da coluna e o nome da classe será a tabela.E se no meu projeto os nome das colunas tem uma nomenclatura totalmente diferente da propriedade e a tabela tb é difeente do nome da classe, como ficaria nesse caso???
Olá Fernando,
Muito bom, funcionou certinho!
Unico problema é que o “ADO.NET POCO Entity Generator” eu não consigui encontrar nos templates online, então baixei o “ADO.NET POCO Entity Generator With WCF support” e não funcionou, então baixei o “EF 4.X POCO Entity Generator for C#” e funcinou corretamente.
Valeu!