Divisão de tabela do designer
Esse passo a passo mostra como mapear vários tipos de entidade para uma única tabela modificando um modelo com o Designer do Entity Framework (Designer EF).
Um dos motivos pelos quais você pode querer usar a divisão de tabelas é atrasar o carregamento de algumas propriedades ao usar o carregamento lento para carregar seus objetos. Você pode separar as propriedades que podem conter uma quantidade muito grande de dados em uma entidade separada e carregá-la somente quando necessário.
A imagem a seguir mostra as janelas principais que são usadas ao trabalhar com o Designer do EF.
Pré-requisitos
Para concluir esta explicação passo a passo, será necessário:
- Uma versão recente do Visual Studio.
- O banco de dados do exemplo escolar.
Configurar o Projeto
Esse passo a passo está usando o Visual Studio 2012.
- Open Visual Studio 2012.
- No menu Arquivo , aponte para Novoe clique em Projeto.
- No painel esquerdo, clique em Visual C# e selecione o modelo do Aplicativo de Console.
- Insira TableSplittingSample como o nome do projeto e clique em OK.
Criar um modelo com base no banco de dados escolar
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto, aponte para Adicionar e clique em Novo Item.
- Selecione Dados no menu à esquerda e selecione Modelo de Dados de Entidade ADO.NET no painel Modelos.
- Insira TableSplittingModel.edmx como o nome do arquivo e clique em Adicionar.
- Na caixa de diálogo Escolher Conteúdos do Modelo, selecione Gerar do banco de dados e, em seguida, clique em Avançar.
- Clique em Nova Conexão. Na caixa de diálogo Propriedades da Conexão, insira o nome do servidor (por exemplo, (localdb)\mssqllocaldb), selecione o método de autenticação, digite Escolar como o nome do banco de dados e clique em OK. A caixa de diálogo Escolher as Conexões de Dados é atualizada com suas configurações de conexão de banco de dados.
- Na caixa de diálogo Escolher Seus Objetos de Banco de Dados, desdobre o nó Tabelas e marque a tabela Pessoa. Isso adicionará a tabela especificada ao modelo Escolar.
- Clique em Concluir.
O Designer do Entity, que fornece uma superfície de design para editar seu modelo, é exibido. Todos os objetos selecionados na caixa de diálogo Escolher Seus Objetos de Banco de Dados são adicionados ao modelo.
Mapear duas entidades para uma única tabela
Nessa seção, você dividirá a entidade Person em duas entidades e as mapeará para uma única tabela.
Observação
A entidade Person não contém nenhuma propriedade que possa conter uma grande quantidade de dados; ela é usada apenas como um exemplo.
- Clique com o botão direito do mouse em uma área vazia da superfície de criação, aponte para Adicionar Novoe clique em Entidade. A caixa de diálogo Nova Entidade é exibida.
- Digite HireInfo para o nome da entidade e PersonID para o nome da Propriedade de 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 Person e pressione as teclas Ctrl+X.
- Selecione a entidade HireInfo e pressione as teclas Ctrl+V.
- Crie uma associação entre Person e HireInfo. Para fazer isso, clique com o botão direito do mouse em uma área vazia da superfície de design, aponte para Adicionar Novo e clique em Associação.
- A caixa de diálogo Adicionar Associação é exibida. O nome PersonHireInfo é fornecido por padrão.
- Especifique a multiplicidade 1(Um) em ambas as extremidades da relação.
- Pressione OK.
A próxima etapa requer a janela Detalhes do Mapeamento. Se você não conseguir ver essa janela, clique com o botão direito do mouse na superfície de criação e selecione Detalhes de Mapeamento.
Selecione o tipo de entidade HireInfo e clique em <Adicionar uma Tabela ou Modo de Exibição> na janela Detalhes do Mapeamento.
Selecione Person na lista suspensa de campo<Adicionar uma Tabela ou Modo de Exibição>. A lista contém tabelas ou exibições 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 criação.
Clique com o botão direito do mouse na associação na superfície de design e selecione Propriedades.
Na janela Propriedades, selecione a propriedade Restrições Referenciais e clique no botão de reticências.
Selecione Person na lista suspensa Main.
Pressione OK.
Usar o modelo
- Insira o código a seguir 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);
}
- Compile e execute o aplicativo.
As instruções T-SQL a seguir foram executadas no banco de dados escolar como resultado da execução deste aplicativo.
O INSERT a seguir foi executado como resultado da execução do contexto. SaveChanges() e combina dados das entidades Person e HireInfo
O SELECT a seguir foi executado como resultado da execução do contexto. People.FirstOrDefault() e seleciona apenas as colunas mapeadas para Person
O SELECT a seguir foi executado como resultado do acesso à propriedade de navegação existingPerson.Instructor e seleciona apenas as colunas mapeadas para HireInfo