Partilhar via


Visão geral do Entity Framework

O Entity Framework é um conjunto de tecnologias em ADO.NET que suportam o desenvolvimento de aplicações de software orientadas para dados. Arquitetos e desenvolvedores de aplicativos orientados a dados têm lutado com a necessidade de alcançar dois objetivos muito diferentes. Eles devem modelar as entidades, os relacionamentos e a lógica dos problemas de negócios que estão resolvendo, e também devem trabalhar com os mecanismos de dados usados para armazenar e recuperar os dados. Os dados podem abranger vários sistemas de armazenamento, cada um com seus próprios protocolos; Mesmo os aplicativos que trabalham com um único sistema de armazenamento devem equilibrar os requisitos do sistema de armazenamento com os requisitos de escrever código de aplicativo eficiente e sustentável.

O Entity Framework permite que os desenvolvedores trabalhem com dados na forma de objetos e propriedades específicos do domínio, como clientes e endereços de clientes, sem ter que se preocupar com as tabelas e colunas do banco de dados subjacente onde esses dados são armazenados. Com o Entity Framework, os desenvolvedores podem trabalhar em um nível mais alto de abstração quando lidam com dados e podem criar e manter aplicativos orientados a dados com menos código do que em aplicativos tradicionais. Como o Entity Framework é um componente do .NET Framework, os aplicativos do Entity Framework podem ser executados em qualquer computador no qual o .NET Framework a partir da versão 3.5 SP1 esteja instalado.

Dê vida aos modelos

Uma abordagem de design comum e de longa data ao criar um aplicativo ou serviço é a divisão do aplicativo ou serviço em três partes: um modelo de domínio, um modelo lógico e um modelo físico. O modelo de domínio define as entidades e relações no sistema que está sendo modelado. O modelo lógico para um banco de dados relacional normaliza as entidades e relacionamentos em tabelas com restrições de chave estrangeira. O modelo físico aborda os recursos de um mecanismo de dados específico, especificando detalhes de armazenamento, como particionamento e indexação.

O modelo físico é refinado pelos administradores de banco de dados para melhorar o desempenho, mas os programadores que escrevem código de aplicativo se limitam principalmente a trabalhar com o modelo lógico escrevendo consultas SQL e chamando procedimentos armazenados. Os modelos de domínio são geralmente usados como uma ferramenta para capturar e comunicar os requisitos de um aplicativo, freqüentemente como diagramas inertes que são vistos e discutidos nos estágios iniciais de um projeto e depois abandonados. Muitas equipes de desenvolvimento ignoram a criação de um modelo conceitual e começam especificando tabelas, colunas e chaves em um banco de dados relacional.

O Entity Framework dá vida aos modelos, permitindo que os desenvolvedores consultem entidades e relacionamentos no modelo de domínio (chamado de modelo conceitual no Entity Framework) enquanto confiam no Entity Framework para traduzir essas operações em comandos específicos da fonte de dados. Isso libera os aplicativos de dependências codificadas em uma fonte de dados específica.

Ao trabalhar com o Code First, o modelo conceitual é mapeado para o modelo de armazenamento no código. O Entity Framework pode inferir o modelo conceitual com base nos tipos de objeto e configurações adicionais que você definir. Os metadados de mapeamento são gerados durante o tempo de execução com base em uma combinação de como você definiu seus tipos de domínio e informações de configuração adicionais fornecidas no código. O Entity Framework gera o banco de dados conforme necessário com base nos metadados. Para obter mais informações, consulte Criando um modelo.

Ao trabalhar com as Ferramentas de Modelo de Dados de Entidade, o modelo conceitual, o modelo de armazenamento e os mapeamentos entre os dois são expressos em esquemas baseados em XML e definidos em arquivos com extensões de nome correspondentes:

  • A linguagem de definição de esquema conceitual (CSDL) define o modelo conceitual. CSDL é a implementação do Modelo de Dados de Entidade do Entity Framework. A extensão do arquivo é .csdl.

  • A linguagem de definição de esquema de armazenamento (SSDL) define o modelo de armazenamento, que também é chamado de modelo lógico. A extensão do arquivo é .ssdl.

  • A linguagem de especificação de mapeamento (MSL) define os mapeamentos entre o armazenamento e os modelos conceituais. A extensão do arquivo é .msl.

O modelo de armazenamento e os mapeamentos podem ser alterados conforme necessário sem exigir alterações no modelo conceitual, nas classes de dados ou no código do aplicativo. Como os modelos de armazenamento são específicos do provedor, você pode trabalhar com um modelo conceitual consistente em várias fontes de dados.

O Entity Framework usa esses arquivos de modelo e mapeamento para criar, ler, atualizar e excluir operações em relação a entidades e relacionamentos no modelo conceitual para operações equivalentes na fonte de dados. O Entity Framework ainda oferece suporte ao mapeamento de entidades no modelo conceitual para procedimentos armazenados na fonte de dados. Para obter mais informações, consulte Especificações CSDL, SSDL e MSL.

Mapear objetos para dados

A programação orientada a objetos representa um desafio para a interação com sistemas de armazenamento de dados. Embora a organização de classes frequentemente espelhe a organização de tabelas de banco de dados relacional, o ajuste não é perfeito. Várias tabelas normalizadas freqüentemente correspondem a uma única classe, e as relações entre classes geralmente são representadas de forma diferente das relações entre tabelas. Por exemplo, para representar o cliente de uma ordem de venda, uma Order classe pode usar uma propriedade que contém uma referência a uma instância de uma Customer classe, enquanto uma Order linha de tabela em um banco de dados contém uma coluna de chave estrangeira (ou conjunto de colunas) com um valor que corresponde a um valor de chave primária na Customer tabela. Uma Customer classe pode ter uma propriedade chamada Orders que contém uma coleção de instâncias da Order classe, enquanto a Customer tabela em um banco de dados não tem coluna comparável. O Entity Framework fornece aos desenvolvedores a flexibilidade de representar relacionamentos dessa maneira ou modelar mais estreitamente os relacionamentos à medida que são representados no banco de dados.

As soluções existentes tentaram preencher essa lacuna, que é frequentemente chamada de "incompatibilidade de impedância", mapeando apenas classes e propriedades orientadas a objetos para tabelas e colunas relacionais. Em vez de adotar essa abordagem tradicional, o Entity Framework mapeia tabelas relacionais, colunas e restrições de chave estrangeira em modelos lógicos para entidades e relacionamentos em modelos conceituais. Isso permite maior flexibilidade tanto na definição de objetos quanto na otimização do modelo lógico. As ferramentas do Modelo de Dados de Entidade geram classes de dados extensíveis com base no modelo conceitual. Essas classes são classes parciais que podem ser estendidas com membros adicionais que o desenvolvedor adiciona. Por padrão, as classes geradas para um determinado modelo conceitual derivam de classes base que fornecem serviços para materializar entidades como objetos e para controlar e salvar alterações. Os desenvolvedores podem usar essas classes para trabalhar com as entidades e relacionamentos como objetos relacionados por associações. Os desenvolvedores também podem personalizar as classes que são geradas para um modelo conceitual. Para obter mais informações, consulte Trabalhando com objetos.

Aceder e alterar dados da entidade

Mais do que apenas outra solução de mapeamento objeto-relacional, o Entity Framework é fundamentalmente sobre permitir que os aplicativos acessem e alterem dados que são representados como entidades e relacionamentos no modelo conceitual. O Entity Framework usa informações nos arquivos de modelo e mapeamento para converter consultas de objeto em tipos de entidade representados no modelo conceitual em consultas específicas da fonte de dados. Os resultados da consulta são materializados em objetos que o Entity Framework gerencia. O Entity Framework fornece as seguintes maneiras de consultar um modelo conceitual e retornar objetos:

  • LINQ para entidades. Fornece suporte a LINQ (Language-Integrated Query) para tipos de entidade de consulta definidos em um modelo conceitual. Para obter mais informações, consulte LINQ to Entities.

  • SQL de entidade. Um dialeto de SQL independente de armazenamento que trabalha diretamente com entidades no modelo conceitual e que suporta conceitos de Modelo de Dados de Entidade. O Entity SQL é usado com consultas de objeto e consultas que são executadas usando o provedor EntityClient. Para obter mais informações, consulte Visão geral do Entity SQL.

O Entity Framework inclui o provedor de dados EntityClient. Esse provedor gerencia conexões, converte consultas de entidade em consultas específicas da fonte de dados e retorna um leitor de dados que o Entity Framework usa para materializar dados de entidade em objetos. Quando a materialização do objeto não é necessária, o provedor EntityClient também pode ser usado como um provedor de dados ADO.NET padrão, permitindo que os aplicativos executem consultas Entity SQL e consumam o leitor de dados somente leitura retornado. Para obter mais informações, consulte EntityClient Provider for the Entity Framework.

O diagrama a seguir ilustra a arquitetura do Entity Framework para acessar dados:

Entity Framework Architectural Diagram

As Ferramentas de Modelo de Dados de Entidade podem gerar uma classe derivada de ou System.Data.Entity.DbContext que representa o contêiner de System.Data.Objects.ObjectContext entidade no modelo conceitual. Esse contexto de objeto fornece os recursos para controlar alterações e gerenciar identidades, simultaneidade e relacionamentos. Essa classe também expõe um SaveChanges método que grava inserções, atualizações e exclusões na fonte de dados. Como as consultas, essas alterações são feitas por comandos gerados automaticamente pelo sistema ou por procedimentos armazenados especificados pelo desenvolvedor.

Fornecedores de dados

O EntityClient provedor estende o modelo de provedor de ADO.NET acessando dados em termos de entidades conceituais e relacionamentos. Ele executa consultas que usam Entity SQL. O Entity SQL fornece a linguagem de consulta subjacente que permite EntityClient se comunicar com o banco de dados. Para obter mais informações, consulte EntityClient Provider for the Entity Framework.

O Entity Framework inclui um Provedor de Dados SqlClient atualizado que oferece suporte a árvores de comandos canônicas. Para obter mais informações, consulte SqlClient para o Entity Framework.

Ferramentas de modelo de dados de entidade

Juntamente com o tempo de execução do Entity Framework, o Visual Studio inclui as ferramentas de mapeamento e modelagem. Para obter mais informações, consulte Modelagem e mapeamento.

Mais informações

Para saber mais sobre o Entity Framework, consulte:

Introdução - Fornece informações sobre como começar a trabalhar rapidamente usando o Guia de início rápido, que mostra como criar um aplicativo simples do Entity Framework.

Terminologia do Entity Framework - Define muitos dos termos que são introduzidos pelo Modelo de Dados de Entidade e pelo Entity Framework e que são usados na documentação do Entity Framework.

Recursos do Entity Framework - Fornece links para tópicos conceituais e links para tópicos e recursos externos para a criação de aplicativos do Entity Framework.

Consulte também