Desvendando o Entity Framework - O Entity Data Model (EDM)


Muito tem se falado ultimamente em ferramentas de mapeamento objeto relacional (OR/M) para tratar o já conhecido problema da impedância entre o paradigma da programação orientada a objetos (POO) e os bancos de dados relacionais.

Os Bancos de dados relacionais usam a abstração de linhas em tabelas, mas as aplicações orientadas a objetos usam a abstração de classes e objetos o que não é a mesma coisa. As ferramentas para mapeamento objeto Relacional (OR/M) tendem a contornar esta diferença mapeando as classes para as tabelas do banco de dados, mas mesmo assim existem algumas características que continuam a exigir um esforço extra após todo esta trabalho.

O objetivo da ADO .NET Entity Framework é mais ambicioso; o serviço OR/M seria apenas mais um serviço e outros serviços como relatórios, sincronização, backup, etc. também seriam oferecidos; para cobrir todos estes serviços foi criado um modelo de dados que é similar ao usado no paradigma orientado a objetos que o desenvolvedor utiliza, e também é independente de qualquer linguagem ou plataforma.

Este modelo de dados é conhecido como Entity Data Model (EDM) ou modelo de entidades de dados e pode ser considerado o coração da do Entity Framework.

O EDM é um modelo entidades - relacionamentos onde :
  • Entidades - são instâncias de tipos de entidades como Clientes, Produtos os quais estão estruturados em registros e chaves;
  • Relacionamentos - são instâncias de tipos de relacionamentos que são associações entre duas ou mais tipos de entidades;

É a partir do modelo de entidades que podemos escrever código usando as diferentes APIs , como o provedor EntityClient ou o Object Services com LINQ to Entities.

Para melhor compreendermos os conceitos relacionados com a EDM podemos separá-los em dois conjuntos:

Vejamos os conceitos básicos relacionados com cada conjunto:

Tipos(principais):

Instâncias (principais):

O EF possui o provedor de dados EntityClient, namespace System.Data.EntityClient, que possui um modelo semelhanto aos objetos ADO .NET e usa os seguintes objetos : EntityCommandDefinition , EntityConnection , EntityConnectionStringBuilder , EntityDataReader , EntityParameter , EntityParameterCollection , EntityProviderFactory e EntityTransaction

Os comandos para este provedor usando o Entity SQL, que opera nas entidades definidas no modelo de entidades e nos objetos do Object Services,e , é parecido com o T-SQL. Você pode usar os Serviços de Objetos (Object Services) para interagir com o EDM usando o EntitySQL ou o LINQ to Entities.

Abaixo temos uma figura onde vemos os Object Services na composição do Entity Framework:

O Entity Data Model é um conceito e o Entity Framework possui uma implementação particular deste modelo que é percebida como um arquivo EDMX em tempo de desenvolvimento. Em tempo de execução o arquivo EDMX é tratado em três arquivos XML separados cada um com um papel definido:

Abaixo temos uma figura que mostra cada um destes arquivos que representam o arquivo .edmx:

Se você estiver curioso pode dar uma olhada nos arquivos de schema que define as regras para as sessões CSDL, SSDL, e MSL no modelo. Os arquivos de schema para o Visual Studio 2008 estão localizados em C:\Arquivos de Programas\Microsoft Visual Studio 9.0\Xml\Schemas

Quando geramos um modelo de entidades pela ferramenta visual do Visual Studio vemos uma representação gráfica de um Entity Data Model e de seus membros na janela Entity Designer. Abaixo temos um exemplo de um modelo de entidades gerado pela ferramenta visual do Visual Studio 2008:

O descritor exibe o arquivo Escola.edmx geraado que consiste de duas entidades: Cursos e Alunos que foram geradas a partir das tabelas Alunos e Cursos.

O descritor também exibe uma linha conectando Cursos e Contatos que representa um relacionamento um-para-muitos entre as duas entidades. Cada entidade possui um número de propriedades escalares e as entidades com relacionamentos, possui também as propriedades de Navegação (Navigation Properties).

Onde as propriedades escalares são propriedades cujos valores estão literalmente contidos na entidade.

As propriedades de navegação são ponteiros para as entidades relacionadas, dessa forma temos:

A janela visual do descritor da entidade usa uma notação para descrever os relacionamentos entre as entidades
conforme as opções a seguir:

- 1 (Um), * (Muitos), 0..1 (Zero ou Um) , 0...1:* (Zero ou Um para Muitos)

Exemplo: "1:*" significa "Um-para-Muitos."    enquanto    "0..1:*" significa "'Zero ou Um' para Muitos"

Você notou que não existe chave estrangeira representada no modelo ?

Como então seria possível vincular as entidades em um relacionamento ?

A figura abaixo exibe as tabelas Cursos e Alunos e o seu relacionamento. Observe que a tabela Alunos possui o campo CursoID que é usado para vincular as tabelas.

O EDM substitui esta chave estrangeira pela propriedade de navegação (Navigation Properties), permitindo assim a vinculação entre as entidades. (Na verdade no metadados do modelo o cursoID ainda existe.)

Além disso o descritor de entidades permite que você obtenha mais informações sobre cada entidade e cada uma de suas propriedades.

Assim se selecionarmos uma propriedade de uma entidade veremos na janela de propriedades os detalhes como na figura acima onde vemos as propriedades da propriedade produtoid da entidade Produtos.

Propriedades das entidades

Cada entidade e cada associação de um EDM , bem como o próprio modelo possui propriedades. Vamos alterar algumas propriedades da entidade Produtos do modelo MacorattiModel. Primeiro vamos selecionar a entidade para ver as suas propriedades na janela de propriedades:

Na janela de propriedades (figura ao lado) podemos ver que a entidade possui o nome Produtos tomado diretamente da tabela no banco de dados.

Observe também que ela possui uma propriedade chamada Entity Set Name.

Um Entity Set é um container para uma coleção de entidades de um tipo único. Por isso, a entity set chamada Produtos contém uma coleção de entidades Produtos.

Os nomes foram gerados pelo assistente e ele não tem a habilidade de automaticamente colocar os nomes no plural ou singular quando for mais apropriado. No nosso caso, como ele tomou o nome das tabelas que já estão no plural, não será necessário fazer ajustes.

 

Poderíamos alterar o nome das propriedades para o modelo fazer mais sentido quando for o caso.

As propriedades de navegação (Proprieties Navigation) também possuem o nome adotado das suas entidades associadas. A entidade Produtos possui duas propriedades de navegação para representar a associação para com as entidades Categorias e ItensPedidos.

Nesta pequena introdução abordei os conceitos principais do Entity Data Model do Entity Framework.

Aguarde mais artigos da série : Desvendando o EntityFramework.

Eu sei é apenas Entity Framework, mas eu gosto...

Referências:


José Carlos Macoratti