Back-End

11 set, 2015

Curso Entity Framework – Criando o modelo de entidades

Publicidade

Nesta aula vamos criar o modelo de entidades via Entity Data Model (EDM) para o banco de dados EscolaDB.mdf (definido na aula anterior) e vamos compreender alguns de seus principais recursos.

Abra o Visual Studio 2013 Express for Windows desktop e clique em New Project. Selecione o template Visual Basic -> Console Application e informe o nome EF6_CursoBasico e clique no botão OK.

ef_curb31

A seguir, clique no menu PROJECT -> Add New Item e selecione “guia Data”, logo após, selecione o template ADO.NET Entity Data Model.

Informe o nome Escola e clique no botão Add.

ef_curb32

No assistente Entity Data model Wizard selecione a opção : Generate from database e clique em Next>.

Na janela – Choose Your Data Connection -, clique na guia New Connection. Já na janela – Add Connection  -, selecione o Data Source Microsoft SQL Server (SqlClient) e informe o nome do servidor : (LocalDB)\v11.0. Selecione o banco de dadosEscolaDB.

Clique no botão Test Connection para verificar se a conexão está ok e, em caso positivo, clique no botão OK.

ef_curb33

Ao final, a janela – Choose Your Data Connection – deverá apresentar os seguintes valores:

ef_curb34

Você pode escolher entre suas conexões de banco de dados existentes, ou criar nova conexão clicando no botão “New Connection”. Vou usar a conexão existente com o banco de dados EscolaDB. Isso também irá adicionar a string de conexão no arquivo app.config com o sufixo padrão com o nome do banco de dados: EscolaDBEntities.

A opção para pluralizar ou singularizar os nomes dos objetos coloca no singular o nome do entityset, se o nome da tabela no banco de dados estiver no plural. Se no banco EscolaDB existir uma tabela com o nome Alunos, o EntitySet ficaria no singular Aluno. Da mesma forma, as relações entre o modelo serão pluralizados se a tabela tem relação um-para-muitos, ou muitos-para-muitos com outra tabela. Por exemplo, a tabela Aluno tem um relacionamento muitos-para-muitos com a tabela de Curs, assim o entity set Aluno terá a propriedade Cursos para a coleção de cursos.

Na opção ‘Include foreign keys in the model’, inclua a propriedade da chave estrangeira explicitamente para representar a chave estrangeira. Por exemplo, a tabela Aluno tem uma relação um-para-muitos com a tabela Padrao. Assim, cada aluno está associado a apenas um Padrao. Para representar isso no modelo, o EntitySet Aluno inclui a propriedade PadraoId com propriedade de navegação padrão. Se esta opção estiver desmarcada, o EF só vai incluir a propriedade padrão, mas não vai incluir a propriedade PadraoId no EntitySet Aluno.

A opção ‘Import selected procedures and functions into the entity model’ automaticamente cria importações de função para as funções e procedimentos armazenados. Você não precisa importá-los manualmente como em versões anteriores do EF.

Vamos continuar clicando no botão Next>.

Na próxima janela do assistente, marque a opção Entity Framework 6 e clique no botão Next>.

ef_curb35

A seguir, selecione todas as tabelas, views e stored procedures do banco de dados e marque as opções conforme a figura abaixo:

ef_curb36

Esta etapa irá exibir todas as tabelas, views e procedimentos armazenados do banco de dados. Selecione os que você desejar, mantenha as caixas padrão selecionadas e clique em Finish. Você pode alterar namespace EscolaModel, se desejar.

Após clicar no botão Finish, será gerado modelo de entidades e exibido no Descritor do Entity Data Model (você pode abrir o descritor clicando duas vezes sobre o arquivo Escola.edmx):

ef_curb37

Na figura, vemos as entidades e as associações entre as entidades com suas multiplicidades representadas. Assim temos:

Mapeamento Entidade-Tabela (Entity – Table Mapping):

  • Cada entidade no EDM está mapeada com uma tabela do banco de dados;

  • Você pode verificar o mapeamento entidade-tabela clicando com o botão direito sobre qualquer entidade e selecionar a opção Table Mapping;

  • Se você alterar qualquer nome de propriedade da entidade no descritor, o mapeamento irá refletir isso imediatamente:

ef_curb38

Context & Entity Classes:

  • Cada Entity Data Model gera um classe Context e múltiplas classes entity para cada tabela do banco de dados;

  • Expandindo o arquivo Escola.edmx vemos dois arquivos importantes: Escola.Content.tt e Escola.tt

ef_curb39

  • Escola.Context.tt é um arquivo template T4 que gera a classe context sempre que você altera o Entity Data Model (arquivo .edmx);

  • Você pode ver o arquivo de contexto expandindo o arquivo Escola.Context.tt. A classe Context reside no arquivo Escola.context.cs;

  • O nome padrão da classe context é {nome do banco de dados} + Entities, assim, para o nosso banco de dados EscolaDB, o contexto tem o nomeEscolaDBEntities;

  • A classe Context é derivada da classe DBContext (no EF 5 e EF 6). Em versões anteriores ela era derivada da classe ObjectContext

ef_curb3a

  • Escola.tt é um arquivo template T4 que gera as classes entity para cada tabela do banco de dados. As classes Entity são classes POCO (Plain Old CLR Object) que podem ser classes proxy.

O descritor EDM: representa o seu modelo conceitual. Ele consiste de entidades, associações e multiplicidade entre as entidades. Inicialmente, ele será parecido com a sua estrutura das suas tabelas no banco, mas você pode adicionar ou mesclar colunas ou remover colunas que não são exigidas por sua aplicação a partir deste descritor.

Você pode adicionar até um novo objeto nesse modelo, que pode ter colunas de diferentes tabelas de banco de dados a partir do menu de contexto, como mostrado na figura acima. Lembre-se que todas as mudanças que você faz aqui serão mapeada com o modelo de armazenamento. Então você tem que ter cuidado ao fazer qualquer alteração no descritor.

Você pode abrir o descritor no editor XML, onde você pode ver todos as três partes do Entity Data Model juntas em uma visão XML:

  • 1- O esquema conceitual (CSDL);
  • 2- O esquema de armazenamento (SSDL);
  • 3- O esquema de mapeamento (MSL).

Clique com o botão direito sobre o arquivo Escola.edmx e na janela pop-up selecione a opção XML (Text) Editor e clique em Add.

Como o Visual Studio não pode exibir o modelo no modo Design e no modo XML ao mesmo tempo, será apresentada uma mensagem perguntando se está tudo OK para fechar a visão do modelo.

ef_curb3b

Clique em Sim para exibir a visão XML.

Podemos ver o conteúdo SSDL, CSDL e o mapeamento. Se você expandir o SSDL e o CSDL cada um terá nós XML comuns sob o nó schema. Você não precisa editar o XML, pois pode fazer isso no Model Browser.

ef_curb3c

Para visualizar o Model Browser, clique com o botão direito sobre o descritor EDM e no menu pop-up selecione Model Browser.

O Model Browser contém todas as informações sobre o EDM, o seu modelo conceitual, modelo de armazenamento e informações de mapeamento.

ef_curb3d

  • EntityContainer: É um invólucro para EntitySets e AssociationSets. É o ponto de entrada crítico para consultar o modelo;
  • EntitySet: É um recipiente para EntityType. Pode ser considerado como uma tabela do banco de dados;
  • EntityType: É um tipo de dados no modelo. Você pode ver cada EntityType para o seu modelo conceitual no XML. Se você expandir o nó EntityType no XML, você pode ver cada propriedade e seu tipo e outras informações;
  • AssociationSet: Define a relação entre cada EntitySet.

Assim criamos o nosso Entity Data Model e demos um visão geral sobre o significado do seu conteúdo mais importante.

Na próxima aula, vamos analisar os tipos de entidades que temos no Entity Framework.