Passo a passo: POCO Template para o Entity Framework

5 08 2010

Dessa vez estava pesquisando sobre o Template ADOM.NET C# POCO Entity Generator e cheguei ao Team blog onde tinha um post em ingles e então estudei o template e achei importante compartilhar com vocês, para isso eu traduzi o post e aqui esta.

para quem quiser conferir a versao original em ingles clique aqui.

O POCO Template pode ser usado para gerar persistência tipos de entidades ignorantes de um Entity Data Model. O objetivo deste passo a passo é demonstrar um cenário básico da sua utilização com o Entity Framework.

Requisitos

  1. Qualquer edição do Visual Studio 2010 post Beta-2.
  2. Entity Framework POCO Modelo para C#, disponível aqui.
  3. Um local SQL Server 2008 Express instância tem que ser instalado como SQLEXPRESS. Caso contrário, poderá ser necessário fazer alterações a connection string no arquivo de configuração ou para regenerar o banco de dados do script SQL incluído.
  4. Baixe e extraia a solução inicial anexado a este post.

Nota: Embora o passo a passo a seguir usa C#, todos os conceitos aqui descritos se aplicam ao Visual Basic versão do modelo que está disponível aqui.

1. Configurando o projeto

A solução inclui um projeto chamado POCOTemplateWalkthrough que é um aplicativo de console. Para facilitar a nos concentrar em como usar o POCO Template, a solução já contém os seguintes arquivos:

  • Blogging.edmx: um simples Entity Data Model para um pedido de blogging.
  • Blogging.mdf: um banco de dados SQL Server para o modelo de blogging.
  • Blogging.edmx.sql: SQL Server script que pode ser usado para regenerar o banco de dados se necessário.
  • Program.cs: a classe inicial do programa criado para aplicativos de console.
  • App.config: um arquivo de configuração do aplicativo que contém a connection string para o banco de blogging.

Normalmente, quando você inicia um novo projeto usando Entity Framework você pode importar um modelo de um banco de dados existente. Na versão 4.0, agora você pode criar um banco de dados a partir do modelo. Para saber mais sobre o primeiro Model Features, veja este post.

2. Compreender o modelo de Blogging

Se você abrir o arquivo “Blogging.edmx, é isso que você vai ver:

image

Cinco classes simples são usadas para modelar uma aplicação de blogging: Blog representa um blog real.Uma pessoa pode agir como o proprietário de um blog, mas também como o autor de um post ou um comentário, tanto que herdam da classe abstrata Entry. Um blog pode ter vários Posts, e por sua vez, cada Post pode ter vários Comments.

Observe que estamos usando chaves estrangeiras nesse modelo: Blog tem tanto o Owner como OwnerID propriedades. É importante notar, contudo, que a exposição da chave estrangeira em entidades não é um requisito para Entity Framework ou o modelo POCO.

Por padrão, um modelo criado com o Designer Entity Data Model produz classes de entidade com base em System.Data.Objects.DataClasses.EntityObject, que fornece serviços básicos às entidades, como a notificação de mudança, gerenciamento de identidade e relacionamento. atributos especiais são usados para decorar as classes e propriedades, de modo que Entity Framework em tempo de execução pode relacionar cada classe e da propriedade com a propriedade correspondente no modelo. Para ver o tipo de código que é gerado por padrão, expanda o Blogging.edmx arquivos associados clicando na seta próximo a ele, e depois abra o arquivo Blogging.Designer.cs:

image

POCO stands para objetos CLR Plain-Velha. POCO apoio da Entidade Framework 4.0 significa que estes tipos EntityObject baseados podem ser substituídas com as classes mais simples. tipos de entidade POCO não são obrigados a herdar de qualquer classe e não precisam de atributos para mapear os elementos homólogos no modelo. Em vez disso, os tipos e propriedades nos objetos e no modelo estão associadas ao tempo de execução simplesmente com base em seus nomes.

Para uma visão geral das entidades de apoio POCO você pode ler as partes 1, 2 e 3 desta série blog sobre POCO e Entity Framework, e também este post sobre o uso de padrões com Entity Framework 4.0.

3. Adicionando o POCO modelo

Uma das vantagens das entidades POCO é que eles são simples. Portanto, em geral, é muito fácil de escrever à mão. No entanto, quando você tem um Entity Data Model como ponto de partida e querem suas classes de entidade a ser POCO, o Modelo POCO pode proporcionar um salto bom, gerando POCO classes que correspondem ao modelo, em vez das classes EntityObject padrão.

Para fazer isso, você pode clicar com o botão direito em uma área vazia da “tela” Blogging.edmx e selecione “Add Code Generation Item…”

image

Isso fará com que o diálogo Add New Item, na qual você pode escolher qual o modelo que deseja usar. O Modelo POCO normalmente pode ser encontrado no Visual C# Itens ou o Visual Basic categoria Artigos.

image

Nesta tela, selecione “ADO.NET Entity POCO Generator” e digite “Blogging.tt” como o nome do novo item.Em seguida, clique no botão “Adicionar”.

Nota: A caixa de diálogo Aviso de Segurança será exibida cada vez que um T4 gera o código de um modelo em sua máquina:

image

Normalmente, os arquivos de modelo T4 geram o código quando eles são adicionados a um projeto ou quando eles são salvos. Se você tiver baixado e instalado o modelo de formulário de uma fonte confiável, você pode clicar em “OK”.

4. Entender como funciona o modelo POCO

Depois de ter adicionado o POCO modelo, o projeto será parecido com este:

image

Quando você escolhe o modelo T4 POCO dois arquivos de modelo são adicionados ao seu projeto. Neste caso, um é chamado de “Blogging.Context.tt” e o outro é chamado de “Blogging.tt”. T4 representa Text Template Transformation Toolkit, e é um modelo de motor que vem com o Visual Studio. O Entity Framework POCO Template aproveita o T4 para permitir que você personalizar a geração de código.

O “Blogging.tt arquivo” é responsável por gerar um arquivo para cada EntityType e ComplexType no modelo “Blogging.edmx. Por exemplo, a versão da classe POCO Blog parecido com este:

image

“Blogging.tt” também gera um arquivo chamado “Blogging.cs”, que contém uma classe FixupCollection <T> utilizado pelas classes POCO para manter as extremidades opostas de uma relação em sincronia.

Por exemplo, no modelo que temos vindo a utilizar, quando você definir autor de um comentário de uma pessoa especial, a classe FixupCollection <T> assegura que a recolha de comentários da Pessoa conterá a comentario também.

O segundo modelo (“Blogging.Context.tt”) produz uma rigidez ObjectContext para o “modelo” Blogging.edmx. Você usa essa rigidez ObjectContext para interagir com o banco de dados.

Observe que cada vez que você editar e salvar qualquer modelo T4 os arquivos dependentes são regenerados, para que você não deve editar os arquivos gerados diretamente, ou suas alterações serão perdidas. Se desejar modificar o código gerado, você pode modificar uma ou ambos os modelos.

Nota: Por que dois modelos?

O principal objetivo do modelo POCO é produzir persistência de classes de entidade ignorante.

No entanto, a rigidez ObjectContext deriva ObjectContext, que é uma entidade de classe Framework.Portanto, este modelo tem de estar em um projeto com uma referência para o Entity Framework.

Ao dividir o modelo em duas partes, uma parte que gera os tipos de entidade e tipos complexos e que gera um contexto de rigidez, torna-se possível não só ter Entidades e ComplexType que são persistência ignorantes, mas mais para colocar as classes em um assembly / projeto que não tem conhecimento no código de persistência em tudo.

Os próximos passos mostram como fazer isso.

5. Movendo tipos de entidade para um projeto separado

Para continuar, adicione um novo projeto Class Library para a solução chamada Entities.

image

Você pode remover o arquivo Class1.cs criado por padrão no novo projeto.

Agora, no projeto POCOTemplateWalkthrough, adicione uma referência de projeto ao projeto Entities:

image

Em seguida, mova o arquivo “Blogging.tt” para o projeto Entities. Para fazer isso, você pode simplesmente arrastar e soltar o arquivo para o projeto Entities na janela Solution Explorer, enquanto você mantiver a tecla Shift ao mesmo tempo.

6. Edit “Blogging.tt ” para corrigir o link para “blogging.edmx”

O POCO Template os arquivos T4 template precisam ser capazes de ler os metadados do modelo EDM, a fim de gerar o código de direito. Desde que mudaram o modelo, a localização relativa do modelo mudou, portanto, temos de corrigir o modelo para o seu link para o modelo está correto novamente. Para fazer isso, você pode modificar uma linha próxima ao topo do modelo a partir de:

string inputfile = @”Blogging.edmx”;

Para:

string inputfile = @”.. \ POCOTemplateWalkthrough \ Blogging.edmx”;

Isto é simplesmente um caminho relativo a partir do modelo do novo local para o arquivo Blogging.edmx em outro projeto.

Uma vez que você fez isso Salve o modelo, e isso vai gerar as classes de entidade POCO. Você pode verificar que o conteúdo do arquivo “Blogging.cs” em “Blogging.tt” tem o direito de verificar o conteúdo que o caminho digitado acima está correta:

image

Além disso, observe o projeto Entities não tem nenhuma referência a System.Data.Entity (aka o Entity Framework), e é completamente ignorante de persistência.

7. Mudar “Blogging.Context.tt” namespaces para coincidir com “entidades”

As classes do projeto Entities estão agora no namespace Entities” em vez do namespace POCOTemplateWalkthrough”, então você precisa modificar o espaço usado pelo modelo de contexto. Caso contrário, o compilador não vai encontrar os tipos de entidade e a solução não irá compilar. Você pode fazer isso definindo o valor da propriedade “Custom Tool Namespace” para “entities” no navegador de propriedade do Template item.

image

Uma vez que você fizer isso, salve o arquivo de modelo novo (ou seja, pressionando Ctrl + S) e você deve ser capaz de compilar a solução sem erros.

8. Teste de sanidade: adição e consulta de dados no banco de dados Blogging

Agora que estamos a fazer produção de classes POCO é hora de verificar que podemos adicionar alguns dados ao banco de dados e recuperá-lo novamente usando nossas classes POCO eo Entity Framework.

Primeiro, adicione esta instrução usando no topo da Program.cs “file:

using Entities;

Em seguida, modificar o método Main(), adicionando as duas seguintes blocos de código:

using (var ctx = new BloggingContainer())
{
var person = new Person();
person.EmailAddress = "billg@microsoft.com";
person.Firstname = "Bill";
person.Surname = "Gates";
ctx.People.AddObject(person);
ctx.SaveChanges();
Console.WriteLine("Saved {0}", person.Firstname);
}
using (var ctx = new BloggingContainer())
{
var person = ctx.People.First();
Console.WriteLine("Found {0}", person.Firstname);
}

9. etapa final: compilar e executar o código

Depois de seguir todos os passos descritos anteriormente, você deve ser capaz de compilar e executar o código e ver a seguinte tela:

image

Personalizar classes e modelos

O tipo de entidade, tipo complexo e classes ObjectContext gerados pelo modelo são todas a classes POCO partial. Por isso, muitas vezes é possível estender o comportamento de entidades apenas adicionando uma classe partial que contém o código adicional para o projeto.

Em outros casos, poderia ser melhor para modificar os modelos próprios para gerar o código diferente. Na verdade, toda a questão de uma solução baseada em modelo é que você pode decidir o comportamento que você quer apenas uma vez e, em seguida, obter o resultado desejado a partir de diferentes modelos através da aplicação de um modelo modificado.

Modificando os arquivos T4 Template consiste em modificar um arquivo de texto, mas está além do escopo desta explicação passo a passo básico. Personalização de modelos T4 para geração de código de entidade é descrita no presente post.

Criar o seu próprio modelo T4 não é coberto neste passo a passo também. Você pode esperar futuro lugares para explorar mais a fundo nesta área. No entretanto, vale ressaltar que o T4 fornece um mecanismo pelo qual você pode escrever utilitários comuns que partilham entre modelos, em algo chamado incluir arquivos.POCO Template usa um arquivo de inclusão chamado EF.Utility.CS.ttinclude. Isto inclui fornece uma série de recursos que tornam a escrita de utilidade T4 modelos Entity Framework para facilitar, entre outros:

  • O suporte a múltiplos arquivo de saída. Por padrão, cada arquivo TT produz apenas um arquivo de saída, o apoio de vários arquivos torna possível criar uma única classe por arquivo, que tem várias vantagens.
  • Funções para produzir segurança identificadores. É possível, no EDM ter identificadores, como o nome de uma entidade tipo, que estão reservados na língua-alvo CLR.
  • Funções para controlar a visibilidade (pública / etc protegidas) das propriedades, etc
  • Funções para interagir com os metadados Entity Framework
Os problemas conhecidos nesta versão
  1. O Modelo POCO não trabalho com projetos ASP.NET WebSite: Um erro no arquivo de saída suporta múltiplos impede que o modelo POCO de trabalhar em projetos WebSite. A correção estará disponível em uma atualização futura. Nesse ínterim, você pode colocar o modelo em uma biblioteca de classes do projeto separado e adicionar uma referência para a biblioteca de classes do WebSite.
  2. Executando uma consulta com inclusão e MergeOption igual NoTracking pode causar uma exceção: Há um problema na interação entre a implementação das relações de código de correção de classes geradas pelo POCO modelo eo controle de alterações POCO Proxies habilitado pelo modelo POCO. Somos actualmente a investigar este assunto.
  3. Separe pode causar estrangeiros propriedades chaves anulável a ser anulado: A aplicação da correção relacionamento não consegue distinguir a razão pela qual uma entidade está sendo removido de um gráfico de objeto. Quando Detach é aplicada a uma entidade que está relacionada com outras associações de estrangeiros através de chave, a lógica de correção vai reagir a nulled sendo feitas e elementos que estão sendo removidos do colecções e irá definir o FK propriedades correspondentes a um valor nulo. Nós estamos investigando esta questão.
  4. O evento AssociationChanged pode ser aumentado duas vezes: O evento AssociationChanged é gerado o dobro com correção CollectionChangeAction.Add quando ocorre no modelo de tal forma que uma coleção é modificado. Nós estamos investigando esta questão.

POCOTemplateWalkthrough.zip

Anúncios

Ações

Information

3 responses

6 08 2010
Artigos da semana « Fernando Ottoboni

[…] Passo a passo: POCO Template para o Entity Framework […]

21 11 2010
Mário César Mancinelli de Araújo

Fala cara, beleza?

Estou procurando um tutorial, vídeo, qualquer coisa que mostre como fazer isto, mas no Visual Studio 2008 (ou seja: .NET Framework 3.5 e Entity Framework 1.0)… Alguma ideia de onde conseguir isso?

Valeu!

22 11 2010
adrielcodeco

Hi,

Bom Mario, todos os videos e webcasts que conheco usam o EF4 e VS 2010 mas vou dar uma procurada e caso eu ache algum prometo postar aqui no blog.

Att,
Obrigado pelo prestigio.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: