Share via


Divisão de entidade de designer

Este passo a passo mostra como mapear um tipo de entidade para duas tabelas modificando um modelo com o Designer do Entity Framework (Designer do EF). Você pode mapear uma entidade para várias tabelas quando as tabelas compartilham uma chave comum. Os conceitos que se aplicam ao mapeamento de um tipo de entidade para duas tabelas são facilmente estendidos para mapear um tipo de entidade para mais de duas tabelas.

A imagem a seguir mostra as janelas principais que são usadas ao trabalhar com o EF Designer.

EF Designer

Pré-requisitos

Visual Studio 2012 ou Visual Studio 2010, Ultimate, Premium, Professional ou Web Express Edition.

Criar o banco de dados

O servidor de banco de dados instalado com o Visual Studio é diferente dependendo da versão do Visual Studio que você instalou:

  • Se você estiver usando o Visual Studio 2012, criará um banco de dados LocalDB.
  • Se você estiver usando o Visual Studio 2010, criará um banco de dados SQL Express.

Primeiro, criaremos um banco de dados com duas tabelas que vamos combinar em uma única entidade.

  • Abra o Visual Studio
  • Exibir ->Gerenciador de Servidores
  • Clique com o botão direito do mouse em Conexões de Dados -> Adicionar conexão...
  • Se você não tiver se conectado a um banco de dados do Gerenciador de Servidores antes, precisará selecionar o Microsoft SQL Server como a fonte de dados
  • Conecte-se ao LocalDB ou ao SQL Express, dependendo de qual você instalou
  • Insira EntitySplitting como o nome do banco de dados
  • Selecione OK e você será perguntado se deseja criar um novo banco de dados, selecione Sim
  • Agora, o novo banco de dados será exibido no Gerenciador de Servidores
  • Se estiver usando o Visual Studio 2012
    • Clique com botão direito do mouse no banco de dados em Gerenciador de Servidores e selecione Nova Consulta
    • Copie o SQL a seguir para a nova consulta e clique com o botão direito do mouse na consulta e selecione Executar
  • Se estiver usando o Visual Studio 2010
    • Selecione Dados -> Editor do SQL Transact -> Nova conexão de consulta...
    • Insira .\SQLEXPRESS como o nome do servidor e clique em OK
    • Selecione o banco de dados EntitySplitting na lista suspensa na parte superior do editor de consultas
    • Copie o SQL a seguir para a nova consulta e clique com o botão direito do mouse na consulta e selecione Executar SQL
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);

CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);

Criar o projeto

  • 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 MapEntityToTablesSample como o nome do projeto e clique em OK.
  • Clique em Não se solicitado a salvar a consulta SQL criada na primeira seção.

Criar um modelo com base no banco de dados

  • 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 MapEntityToTablesModel.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.
  • Selecione a conexão EntitySplitting na lista suspensa e clique em Avançar.
  • Na caixa de diálogo Escolher Seus Objetos de Banco de Dados, marque a caixa ao lado do nó Tabelas. Isso adicionará todas as tabelas do banco de dados EntitySplitting ao modelo.
  • Clique em Concluir.

O Designer do Entity, que fornece uma superfície de design para editar seu modelo, é exibido.

Mapear uma entidade para duas tabelas

Nessa etapa, atualizaremos o tipo de entidade Person para combinar dados das tabelas Person e PersonInfo.

  • Selecione as propriedades Email e Telefone da entidade **PersonInfo **e pressione as Teclas Ctrl+X.

  • Selecione a entidade **Person **e pressione Ctrl+V.

  • Na superfície de design, selecione a entidade PersonInfo e pressione o botão Excluir no teclado.

  • Clique em Não quando perguntado se você deseja remover a tabela PersonInfo do modelo, estamos prestes a mapeá-la para a entidade Person.

    Delete Tables

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 Person e clique em <Adicionar uma Tabela ou Modo de Exibição> na janela Detalhes do Mapeamento.
  • Selecione **PersonInfo ** na lista suspensa. A janela Detalhes do Mapeamento é atualizada com mapeamentos de coluna padrão, eles são bons para o nosso cenário.

O tipo de entidade Person agora está mapeado para as tabelas Person e PersonInfo.

Mapping 2

Use o modelo

  • Cole o código a seguir no método Main.
    using (var context = new EntitySplittingEntities())
    {
        var person = new Person
        {
            FirstName = "John",
            LastName = "Doe",
            Email = "john@example.com",
            Phone = "555-555-5555"
        };

        context.People.Add(person);
        context.SaveChanges();

        foreach (var item in context.People)
        {
            Console.WriteLine(item.FirstName);
        }
    }
  • Compile e execute o aplicativo.

As instruções T-SQL a seguir foram executadas no banco de dados como resultado da execução desse aplicativo. 

  • As duas instruções INSERT a seguir foram executadas como resultado da execução de context.SaveChanges(). Eles pegam os dados da entidade Person e os dividem entre as tabelas Person e PersonInfo.

    Insert 1

    Insert 2

  • O SELECT a seguir foi executado como resultado da enumeração das pessoas no banco de dados. Ele combina os dados da tabela Person e PersonInfo.

    Select Combining Person and PersonInfo Data