Back-End

27 ago, 2015

Entity Framework – apresentação e arquitetura

Publicidade

Afinal, o que é o Entity Framework? A resposta oficial da Microsoft é:

“A Microsoft ADO.NET Entity Framework é um framework de mapeamento Objeto/Relacional (ORM) que permite aos desenvolvedores trabalhar com dados relacionais como objetos específicos de domínio, eliminando a necessidade da maior parte do código de acesso de dados de que os desenvolvedores geralmente precisam escrever. Usando o Entity Framework, os desenvolvedores realizam consultas utilizando o LINQ, em seguida, recuperam e manipulam dados como objetos fortemente tipados. A Implementação do ORM Entity Framework fornece serviços como controle de alterações, resolução de identidade, lazy loading, tradução de consultas etc. de forma que os desenvolvedores podem se concentrar na lógica de negócios da sua aplicação ao invés de nos fundamentos de acesso a dados”.

Simplificando, podemos dizer que o Entity Framework é um framework O/RM que realiza o mapeamento Objeto/Relacional (O/RM) partindo do modelo relacional de dados e gerando classes que representam as entidades do domínio.

Mas o que é um framework O/RM e por que precisamos dele?

Um framework ORM é uma ferramenta para o armazenamento de dados a partir de objetos de domínio em um banco de dados relacional como o MS SQL Server de forma automatizada.

Uma ferramenta O/RM inclui três partes principais:

  1. Objetos de classe de domínio;
  2. Objetos de banco de dados relacionais;
  3. Informações de mapeamento de como objetos de domínio são mapeados para os objetos de banco de dados relacionais (tabelas,visões e StoredProcedures).

Uma ferramenta ORM nos ajuda a manter nosso projeto de banco de dados separado do nosso projeto de classe de domínio. Isso faz com que a aplicação seja sustentável e extensível. Ele também automatiza as operações CRUD padrão (criar, ler, atualizar e excluir) para o desenvolvedor não precisar escrever o código manualmente.

Dessa forma, o Entity Framework – EF é um conjunto de tecnologias da ADO .NET que suporta o desenvolvimento de aplicações orientadas a dados. Arquitetos e desenvolvedores de aplicações orientadas a dados têm se debatido com a necessidade de alcançar dois objetivos distintos:

  • Modelar entidades, relacionamentos e problemas da lógica de negócio;
  • Trabalhar com sistemas de armazenamento de dados para armazenar e consultar informações.

O problema é que os dados podem estar distribuídos em múltiplos sistemas de armazenamentos, cada um com suas particularidades e protocolos; e mesmo em situações na quais somente um único sistema de armazenamento é usado, ainda existe a necessidade de balancear os requisitos de armazenamento com os requisitos de escrever um código eficiente.

O Entity Framework – EF permite aos desenvolvedores trabalhar com dados na forma de propriedades e objetos específicos do domínio como clientes e produtos etc, sem ter que relacioná-los com as tabelas do banco de dados e as colunas onde os dados estão armazenados. Isto é possível pela elevação do nível de abstração no qual os desenvolvedores podem trabalhar quando estão tratando com os dados e pela redução do código que é necessário para manter as aplicações orientadas a dados.

Nota: Existem diversos frameworks ORM no mercados sendo os principais: DataObjects.Net, NHibernate, OpenAccess, SubSonic etc.

O Entity Framework é uma ferramenta ORM Open Source da Microsoft.

Para você se situar, na tabela a seguir temos uma apresentação de cada versão do EF e seus principais recursos:

Versão Principais Recursos
EF 3.5 Suporte a O/RM básico com a abordagem Database First.
EF 4.0 Suporte a POCO, Lazy loading, melhoria na testabilidade, geração de código customizada e a abordagem Model First.
EF 4.1 Disponibilizado também via pacote NuGet, API DBContext Simplificada ao invés de ObjectContext, abordagem Code First. (Correção de bugs com a versão EF 4.1.1) 
EF 4.3 Recurso Code First Migrations que permite que um banco de dados criado via Code First ser gradativamente alterado conforme o modelo Code First evoluir. Liberação da versão EF 4.3.1 para correção de bugs do EF 4.3.
EF 5.0 Anunciado EF como Open Source. Apoio a Enum Introduzido, funções com valor de tabela, tipos de dados espaciais, vários diagramas por modelo, coloração de formas na superfície de projeto e importação de lote de procedimentos armazenados, EF Power Tools e várias melhorias de desempenho.
EF 6.0/6.1 Inclui muitos novos recursos relacionadas ao Code-First e ao descritor EF como consulta e persistência assíncrona, resilência da resolução de dependências, etc

Arquitetura do Entity Framework

O Entity Framework renova o modelo conceitual permitindo que os desenvolvedores consultem entidades e relacionamentos neste modelo, enquanto contam com o suporte da Entity Framework para traduzir estas operações para comandos específicos da fonte de dados liberando as aplicações das dependências de código específicas de uma fonte de dados particular.

Um padrão muito usado para modelagem de dados divide o modelo de dados em 3 partes:

  • O modelo conceitual – define as entidades e relacionamentos do sistema modelado;
  • O modelo lógico – normaliza as entidades e relacionamentos entre as tabelas com chaves primárias e constraints para os banco de dados relacionais;
  • O modelo físico – analisa e aplica as capacidades de um sistema de armazenamento específico, definindo detalhes de armazenamento como particionamento e indexação.

O modelo conceitual, o de armazenamento e o mapeamento entre os dois são expressos em uma especificação externa chamada de Entity Data Model-EDM.

O Entity Data Model é um modelo de dados Entidade-Relacionamento cujo conceito central são as entidades e os relacionamentos, onde entidades são instâncias de tipos de entidades como cliente, produto, categoria – as quais são estruturas de registros com uma chave. Um chave de entidade é formada a partir de um subconjunto de propriedades do tipo da entidade. A chave (clienteID, ProdutoID etc) é um conceito fundamental para identificar de forma única , atualizar instâncias e permitir que as instâncias de entidades participem nos relacionamentos.

Além do Entity Data Model, o Entity Framework inclui serviços que incrementam o poder do modelo incluindo o provedor gerenciado EntityClient, ObjectServices e LINQ to Entities conforme mostrado na figura abaixo:

A figura a seguir mostra uma visão geral da arquitetura do Entity Framework.

EFArchitecture

Vejamos a seguir cada um desses componentes.

O Entity Data Model (EDM) consiste basicamente em três partes: o modelo conceitual, o mapeamento e o modelo de armazenamento.

O EDM é definido pelos seguintes arquivos de modelo e mapeamento:

  • Arquivo de definição de schema conceitual – (.csdl) – define o modelo conceitual;
  • Arquivo de definição schema de armazenamento – (.ssdl)  – define o modelo de armazenamento que também é chamado de modelo lógico;
  • Arquivo de especificação de mapeamento – (.msl) – define o mapeamento entre os modelos conceitual e de armazenamento.
  1. Conceptual Model: é o seu modelo de classe e seus relacionamentos, sendo independente do projeto das tabelas e seu banco de dados;
  2. Storage Model: é o seu modelo de banco de dados que inclui as tabelas, views, procedimentos armazenados e seus relacionamentos e chaves;
  3. Mapping: consiste em informação sobre como o seu Conceptual Model está mapeado para o Storage Model.

O LINQ to Entities fornece suporte às consultas LINQ para tipos de entidades que são definidos no modelo conceitual. Já o Entity SQL é um dialeto SQL independente, que trabalha diretamente com as entidades no modelo conceitual, que por sua vez suporta as características EDM como herança e relacionamento.

A Entity SQL é uma variação da SQL e foi criada com objetivo de escrever consultas declarativas e atualizações sobre entidades e relacionamentos de entidades no nível conceitual. Ela vai além da SQL, pois dá suporte aos seguintes recursos:

  • Types, que são como entidades ADO.NET, totalmente tipados;
  • EntitySets, que são tratados como uma coleção de entidades;
  • Composability, que remove restrições onde as subconsultas podem ser usadas.

O Object Services é um componente do Entity Framework que permite que você realize consultas, inclusões, atualizações e exclusões de dados expressos como um objetos CLR fortemente tipados, que são instâncias de tipos de entidades.

  • O Object Services dá suporte a consultas LINQ e Entity SQL contra tipos que são definidos em um EDM.
  • O Object Services também materializa os dados retornados como objetos e propaga as alterações dos objetos de volta à fonte de dados, além de fornecer facilidades para tratar alterações, vinculação de controles a objetos e efetuar o tratamento da concorrência.

O EntityClient Data Provider gerencia conexões, traduz consultas de entidades em consultas específicas da fonte de dados e retorna um leitor de dados que os Serviços de Objeto usam para materializar os dados de entidades em objetos. Quando a materialização em objetos não é necessária, o provedor EntityClient também pode ser usado como um provedor de dados ADO .NET padrão, permitindo que aplicações executem consultas Entity SQL e consumam os dados retornados como um leitor somente-leitura.

Já o ADO.Net Data Provider  é uma camada que se comunica com o banco de dados usando a ADO .NET padrão.

Na próxima aula vamos definir o banco de dados, tabelas, procedimentos armazenados e views que iremos usar em nosso curso.