Este artigo foi traduzido por máquina.

Pontos de dados

Desmistificando estratégias do Entity Framework: Fluxo de trabalho de criação de modelos

Julie Lerman

Julie LermanComo uma tecnologia de acesso a dados foi projetada para atender às necessidades de diversos estilos de desenvolvimento, o Entity Framework da Microsoft apresenta os desenvolvedores muitas opções. Algumas dessas opções precisam ser feitas desde o início no seu ciclo de desenvolvimento e terá impacto sobre quais opções você terá ainda mais ao longo do processo de desenvolvimento. Minhas próximas três colunas, eu darei orientações de alto nível para algumas das maiores decisões que você precisará fazer com o Entity Framework:

  • Primeiro, o código primeiro do modelo ou banco de dados primeiro fluxos de trabalho para a criação de um modelo conceitual
  • Carregamento adiantado, explícito ou lento
  • Plain Old TRANSLATION FROM VPE FOR CSHARP Objects (POCOs) ou EntityObjects
  • LINQ para entidades ou Entity SQL

Há muitas decisões de design mais sejam feitas em todo o seu aplicativo, mas essas perguntas são mais freqüentes — e freqüentemente debatido — por desenvolvedores que estão começando a implementar o Entity Framework a aplicativos novos ou existentes.

Vou atacar o fluxo de trabalho de criação de modelo conceitual aqui e os outros três tópicos nas próximas duas colunas de folha de rosto. Meu objetivo é fornecer uma visão geral.

Três opções para a criação de um modelo conceitual

O Entity Framework se baseia em um modelo conceitual de suas entidades de domínio, chamado de um modelo de dados de entidades (EDM), e escolha como criar esse modelo é a primeira decisão que você precisa fazer. Existem três fluxos de trabalho separados à sua escolha:

  • O banco de dados primeiro fluxo de trabalho começa com um banco de dados legado e utiliza um Assistente para engenharia reversa que banco de dados em um modelo conceitual.
  • O modelo primeiro fluxo de trabalho começa com uma lista de praticamente vazia. Você usa o visual Designer do EDM para projetar um EDM e gera o esquema de banco de dados a partir desse modelo.
  • O código primeiro fluxo de trabalho começa com classes que descrevem o modelo conceitual. Não há nenhum modelo de visual usado com o código primeiro.

Primeiro banco de dados: Começar com um banco de dados legados

A primeira iteração da Entity Framework, tínhamos todas as opções mencionadas. A única maneira de criar um modelo foi a engenharia reversa de um banco de dados existente em um EDM, que chamamos de modelagem de banco de dados primeiro (consulte Figura 1).

With Database First, You Reverse-Engineer a Model from a Legacy Database

Figura 1 com Banco de dados pela primeira vez, você engenharia reversa um modelo a partir de um banco de dados do legado

Você provavelmente já viu que isso demonstrou muitas vezes, na verdade. Abra o Assistente do EDM, aponte para um banco de dados existente, selecione quais tabelas, modos de exibição, funções definidas pelo usuário você gostaria de ser representados no modelo e clique no botão Concluir e procedimentos armazenados. Instantaneamente, um modelo nasceu. O modelo de banco de dados primeiro começa sua vida como um reflexo virtual do banco de dados (ou esse subconjunto do banco de dados selecionado). Sem qualquer esforço de mais, os desenvolvedores já beneficiará o Entity Framework. Você pode escrever com rigidez de tipos de consultas em relação a esse modelo, e o Entity Framework irá executar essas consultas para você e materializar os objetos com rigidez de tipos de resultados. Enquanto você trabalha com os resultados, a estrutura de entidades controla as alterações e lhe permite conservá-las no banco de dados simplesmente chamando seu comando SaveChanges.

Que vai ser tudo o que precisam, alguns desenvolvedores de estrutura de entidades, mas eles estiver há um dos grandes benefícios de ter o modelo, que é que você pode criá-lo pareça mais com seu domínio — as classes e as relações que definem o seu aplicativo — que o banco de dados.e, em seguida, não precisa se preocupar sobre como obter da parte de trás de lá para seu banco de dados (que continuará a Entity Framework para cuidar para você). Personalização do modelo é um recurso crítico do EDM que muitos desenvolvedores se esqueçam e não se beneficiar. Você pode introduzir hierarquias de herança no modelo, remodelar entidades, combine e entidades de divisão e muito mais.

Com o banco de dados primeiro, você pode ter o melhor de ambos esses mundos: aproveite o banco de dados existente para enorme Saia na frente com a criação de seu modelo, em seguida, personalizar esse modelo para refletir melhor o seu domínio de aplicativo.

Modelo pela primeira vez: Começar com um modelo de Visual

Sempre não terá começar com um banco de dados legado. Modelo primeiro permite projetar o modelo diretamente no designer e criar o seu esquema de banco de dados com base no modelo. Você pode construir suas entidades e suas propriedades, definir relacionamentos e suas restrições e criar direito de hierarquias de herança no designer. Você pode especificar quais propriedades se tornará chaves de identidade e mesmo se o banco de dados deve ser responsável por gerar seus valores (consulte Figura 2).

With Model First, You Design a Model that’s Used to Generate Database Schema

Figura 2 com modelo pela primeira vez, se cria um modelo que é usado para gerar o esquema de banco de dados

O Designer do EDM recurso ""Criar banco de dados de modelo, na verdade, não cria um banco de dados. O que irá fazer é criar SQL que, quando executado, irá definir o esquema de banco de dados. Esse SQL é conhecido como linguagem de definição de dados ou DDL.

Existem algumas coisas que não é óbvias estar atento. Modelo foi introduzido no Visual Studio 2010 e a Microsoft.NET Framework 4. Você não encontrará a opção de criar o banco de dados no Visual Studio 2008. Além disso, porque é um novo recurso, você precisará garantir que o ADO.Provedor de dados do NET que você está usando (por exemplo, System.Data.Sql) foi atualizado para fornecer essa capacidade. O provedor do Microsoft SQL Server foi atualizado para o.NET 4 versão; Alguns provedores de terceiros também foram atualizadas.

Um comportamento deve ser preparada para é que primeiro do modelo não, por padrão, realizar atualizações de esquema incremental para seu banco de dados. Quando você executa o recurso, ele criará um script DDL completamente novo que irá remover e recriar todos os objetos de banco de dados. Ferramentas externas estão disponíveis para ajudar você modificar o esquema de banco de dados em vez de substituí-lo. Caso contrário, você desejará fazer backup dos dados antecipadamente ou escrever um script para gerar novamente os dados de teste sempre que você deseja modificar o modelo e recriar o esquema de banco de dados.

Visual Studio fornecem um ponto de extensibilidade na geração de banco de dados, que você pode aproveitar com a Ajuda da entidade criador de banco de dados geração Power Pack da Microsoft. Você pode baixá-lo do Visual Studio 2010 Extension Manager ou de visualstudiogallery.com. Essa extensão não apenas fornece uma maneira para fazer incremental é alterado no banco de dados com o modelo primeiro, mas ele também oferece a capacidade de alterar o mapeamento de herança de tabela por hierarquia padrão e até mesmo criar suas próprias regras personalizadas de geração de DDL.

Código pela primeira vez: Começar com o código e se abster de um modelo físico

Com o banco de dados primeiro e o modelo primeiro, você acabará com uma representação física de seu EDM juntamente com metadados adicionais. O formato desse modelo é XML. Ele é armazenado em um arquivo com uma extensão de edmx para, e você pode trabalhar com ele no Designer do EDM ou o XML bruto. At Runtime, as leituras do Entity Framework que XML e cria uma representação na memória do modelo usando classes especializadas que representam os metadados — entidades, relações e assim por diante. O tempo de execução do Entity Framework trabalha com esses objetos, não o arquivo XML real. Esses metadados são especialmente crítico quando o Entity Framework precisa transformar a consultas de modelo em consultas de banco de dados, os resultados do banco de dados para instâncias de entidades e criar comandos de banco de dados para inserções, atualizações e exclusões. O Visual Studio irá gerar as classes de domínio do XML para usar em seu aplicativo.

A equipe do Entity Framework já surgiu uma maneira de criar os objetos de metadados necessários em tempo de execução, sem exigir que você tenha um arquivo EDMX para físico. Este é o poder por trás do terceiro fluxo de trabalho de criação do modelo para a Entity Framework, chamado código primeiro. Com código em primeiro lugar, em vez de criar um EDM, você cria suas classes de domínio como você faria para qualquer outro.NET development. Em tempo de execução, o Entity Framework irá inspecionar dessas classes e, usando um conjunto de convenções padrão, criar um modelo de memória que o tempo de execução do Entity Framework pode trabalhar com. Porque suas classes sempre naturalmente não fornecerá informações que o Entity Framework necessita para criar esse modelo, você pode fornecer configuração adicional (usando atributos declarativos/dados anotações ou no código usando uma API fluent) para relatar mais o modelo, substituindo as convenções mencionadas anteriormente. Você pode usar a configuração para uma ampla variedade de tarefas de modelo, identificando as chaves primárias que não coincidirem com as convenções de código primeiro às relações de ajuste fino ou até mesmo especificar como uma hierarquia de herança deve ser representada.

Como o primeiro de modelo de código primeiro padrão é a suposição de que você não estiver iniciando com um banco de dados legado e fornece a capacidade de criar o banco de dados do modelo inferido. Ao contrário do modelo primeiro, você pode criar o arquivo de banco de dados bem como o esquema. Com o código primeiro, você ainda carecem de uma maneira de manter o banco de dados se você modificar o modelo e regenerar o banco de dados. No entanto, primeiro do código tem suporte para detectar diferenças do modelo e o banco de dados, bem como propagar o banco de dados com dados usando os inicializadores de banco de dados.

Você também pode usar código primeiro com um banco de dados existente. Se os nomes de classe e a propriedade não corresponderem ao banco de dados, você pode adicionar anotações de dados ou configuração por meio da API fluent superar que. Figura 3 mostra uma classe com atributos que forçará o primeiro código para fornecer mapeamentos para os nomes de tabela e propriedade corretos, mesmo que a classe e campos não coincidem exatamente.

Figura 3 uma classe com código primeiros atributos para a classe pode mapear corretamente a uma tabela existente

[Table("SalesOrderDetail", SchemaName="SalesLT")]
  public partial class Detail
  {
    // Scalar properties

    [Column(Name = "SalesOrderID")]
    public int OrderId { get; set; }
    [Column(Name = "SalesOrderDetailID")]
    public int DetailId { get; set; }
    public short OrderQty { get; set; }
    public int ProductId { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal UnitPriceDiscount { get; set; }

    public decimal LineTotal { get; set; }
    public System.DateTime ModifiedDate { get; set; }

    // Navigation properties

    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
  }

Uma árvore de decisão

O Entity Framework evoluiu para suportar uma variedade de estilos de desenvolvimento, mas isso força agora estar familiarizado com as opções para escolher a abordagem correta. Se desejar usar uma interface do usuário para o seu modelo, você terá o design do EDM disponível se você estiver começando com um banco de dados existente ou usando a opção de modelo primeiro. Mesmo assim, você ainda pode usar o Modelador para ajudar a tornar o interesse do zero e, em seguida, usar um modelo para criar classes de código primeiro e solte o modelo de visual. Se você é tudo sobre o código e prefere não ser vinculado a um arquivo EDMX ou o visual modeler, primeiro código irá agradar a você (ver Figura 4).

The Decision Tree

Figura 4 árvore de decisão

Iniciando no caminho certo

Qualquer técnica de modelagem escolhido — primeiro do banco de dados, primeiro do modelo ou código primeiro — depois de criar um modelo, você não verá diferença alguma quando você começa a consultar, interagir com e persistir entidades usando o tempo de execução do Entity Framework por meio de classes do modelo. E é possível começar com um fluxo de trabalho e alternar para outro. Você pode criar classes de código primeiro de uma edmx para usar o modelo de geração de código de DbContext. E, embora não seja tão fácil, você também pode criar um edmx para das classes de código primeiro.

Forneci uma visão geral das opções que podem levar você a escolher um sobre o outro e esperamos que tenha desmistificadas algumas das opções para você.

Nas próximas colunas, falarei sobre outras decisões de grandes enfrentará nos aplicativos do Entity Framework, que mencionei no início desta coluna: escolhendo uma estratégia de geração de código para EntityObjects ou POCOs, carregando relacionadas a dados usando o carregamento adiantado, lento ou explícitoe escrever consultas usando LINQ to SQL de entidade ou entidades.

Julie Lerman é uma Microsoft MVP, mentora e consultora do .NET, que reside nas colinas de Vermont. Você pode encontrar sua apresentação sobre acesso a dados e outros tópicos do Microsoft .NET em grupos de usuários e conferências ao redor do mundo. She blogs at thedatafarm.com e é o autor do aclamado livro, "Programação Entity Framework" (o ' Reilly Media, 2010). Segui-la no Twitter em twitter.com/julielerman.

Graças aos seguinte perito técnico para revisão deste artigo: Tim Laverty