Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta guia mostra como mapear múltiplos tipos de entidades para uma única tabela modificando um modelo com o Entity Framework Designer (EF Designer).
Uma razão para querer usar a divisão de tabelas é atrasar o carregamento de algumas propriedades ao utilizar lazy loading para carregar os seus objetos. Podes separar as propriedades que podem conter uma grande quantidade de dados numa entidade separada e só carregar quando necessário.
A imagem seguinte mostra as janelas principais utilizadas ao trabalhar com o EF Designer.
Pré-requisitos
Para completar esta explicação, vai precisar de:
- Uma versão recente do Visual Studio.
- A base de dados de exemplos da escola.
Criar o Projeto
Este guia passo a passo está a usar o Visual Studio 2012.
- Abra o Visual Studio 2012.
- No menu Arquivo , aponte para Novo e clique em Projeto.
- No painel esquerdo, clique em Visual C# e depois selecione o modelo de Aplicação de Consola.
- Introduza TableSplittingSample como nome do projeto e clique em OK.
Criar um Modelo baseado na Base de Dados da Escola
- Clique com o botão direito no nome do projeto no Explorador de Soluções, aponte para Adicionar e depois clique em Novo Item.
- Selecione Dados no menu esquerdo e depois selecione ADO.NET Modelo de Dados de Entidade no painel de Modelos.
- Insira TableSplittingModel.edmx para o nome do ficheiro e depois clique em Adicionar.
- Na caixa de diálogo Escolher Conteúdo do Modelo, selecione Gerar a partir da base de dados e depois clique em Próximo.
- Clique em Nova Ligação. Na caixa de diálogo Propriedades da Ligação, introduza o nome do servidor (por exemplo, (localdb)\mssqllocaldb), selecione o método de autenticação, escreva School para o nome da base de dados e depois clique em OK. A caixa de diálogo Escolha a Sua Ligação de Dados é atualizada com as definições de ligação à base de dados.
- Na caixa de diálogo Escolher os Seus Objetos de Base de Dados, desdobre o nó Tabelas e seleccione a tabela Pessoa. Isto irá adicionar a tabela especificada ao modelo da Escola .
- Clique em Concluir.
O Designer de Entidades, que fornece uma superfície de design para editar o seu modelo, é exibido. Todos os objetos que selecionaste na caixa de diálogo Escolhe os Teus Objetos de Base de Dados são adicionados ao modelo.
Mapear duas entidades para uma única tabela
Nesta secção, vais dividir a entidade Pessoa em duas entidades e depois mapeá-las para uma única tabela.
Observação
A entidade Pessoa não contém quaisquer propriedades que possam conter uma grande quantidade de dados; É apenas usado como exemplo.
- Clique com o botão direito numa área vazia da superfície do design, aponte para Adicionar Novo e clique em Entidade. A caixa de diálogo Nova Entidade aparece.
- Escreva HireInfo para o Nome da Entidade e PersonID para o Nome da Propriedade Chave.
- Clique em OK.
- Um novo tipo de entidade é criado e exibido na superfície de design.
- Selecione a propriedade HireDate do tipo de entidade Pessoa e pressione as teclas Ctrl+X .
- Selecione a entidade HireInfo e pressione as teclas Ctrl+V .
- Crie uma associação entre Pessoa e HireInfo. Para isso, clique com o botão direito numa área vazia da superfície do design, aponte para Adicionar Novo e clique em Associação.
- A caixa de diálogo Adicionar Associação aparece. O nome PersonHireInfo é dado por defeito.
- Especifique multiplicidade 1(Um) em ambas as extremidades da relação.
- Pressione OK.
O passo seguinte requer a janela de Detalhes de Mapeamento . Se não conseguir ver esta janela, clique com o botão direito na superfície do design e selecione Detalhes de Mapeamento.
Selecione o tipo de entidade HireInfo e clique <em Adicionar uma Tabela ou Vista> na janela de Detalhes do Mapeamento .
Selecione Pessoa na <lista suspensa do campo Adicionar uma Tabela ou Visualizar>. A lista contém tabelas ou vistas para as quais a entidade selecionada pode ser mapeada. As propriedades apropriadas devem ser mapeadas por padrão.
Selecione a associação PersonHireInfo na superfície de design.
Clique com o botão direito na associação na superfície de design e selecione Propriedades.
Na janela de Propriedades, selecione a propriedade Restrições Referenciais e clique no botão de elipses.
Selecione Pessoa na lista suspensa Principal.
Pressione OK.
Usar o Modelo
- Cole o código seguinte no método Main.
using (var context = new SchoolEntities())
{
Person person = new Person()
{
FirstName = "Kimberly",
LastName = "Morgan",
Discriminator = "Instructor",
};
person.HireInfo = new HireInfo()
{
HireDate = DateTime.Now
};
// Add the new person to the context.
context.People.Add(person);
// Insert a row into the Person table.
context.SaveChanges();
// Execute a query against the Person table.
// The query returns columns that map to the Person entity.
var existingPerson = context.People.FirstOrDefault();
// Execute a query against the Person table.
// The query returns columns that map to the Instructor entity.
var hireInfo = existingPerson.HireInfo;
Console.WriteLine("{0} was hired on {1}",
existingPerson.LastName, hireInfo.HireDate);
}
- Compilar e executar a aplicação.
As seguintes instruções T-SQL foram executadas contra a base de dados da Escola como resultado da execução desta aplicação.
O INSERT seguinte foi executado como resultado da execução de contexto.SaveChanges() e combina dados das entidades Person e HireInfo
O SELECT a seguir foi executado como resultado da execução do método context.People.FirstOrDefault() e seleciona apenas as colunas mapeadas para Person.
O SELECT seguinte foi executado ao aceder à propriedade de navegação existingPerson.Instructor e seleciona apenas as colunas mapeadas para HireInfo