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.
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.
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.
Ao final, a janela – Choose Your Data Connection – deverá apresentar os seguintes valores:
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>.
A seguir, selecione todas as tabelas, views e stored procedures do banco de dados e marque as opções conforme a figura abaixo:
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):
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:
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
-
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
- 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.
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.
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.
- 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.