Partilhar via


Divisão de Entidades do Designer

Esta guia mostra como mapear um tipo de entidade para duas tabelas modificando um modelo com o Entity Framework Designer (EF Designer). Podes mapear uma entidade para múltiplas tabelas quando as tabelas partilham 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 seguinte mostra as janelas principais utilizadas ao trabalhar com o EF Designer.

EF Designer

Pré-requisitos

Visual Studio 2012 ou Visual Studio 2010, edição Ultimate, Premium, Professional ou Web Express.

Criar a Base de Dados

O servidor de base de dados instalado com o Visual Studio varia consoante a versão do Visual Studio que tem instalado:

  • Se estiveres a usar Visual Studio 2012, então vais criar uma base de dados LocalDB.
  • Se estiveres a usar Visual Studio 2010, vais criar uma base de dados SQL Express.

Primeiro, vamos criar uma base de dados com duas tabelas que vamos combinar numa única entidade.

  • Abrir o Visual Studio
  • Visualização -> Explorador de Servidores
  • Clique com o botão direito em Ligações de Dados -> Adicionar Ligação...
  • Se nunca se ligou a uma base de dados do Server Explorer, terá de selecionar Microsoft SQL Server como fonte de dados
  • Liga-te ao LocalDB ou SQL Express, dependendo de qual tens instalado
  • Insira EntitySplitting como nome da base de dados
  • Selecione OK e ser-lhe-á perguntado se quer criar uma nova base de dados, selecione Sim
  • A nova base de dados irá agora aparecer no Server Explorer
  • Se estiveres a usar Visual Studio 2012
    • Clique com o botão direito na base de dados no Explorador de Servidores e selecione Nova Consulta
    • Copie o SQL seguinte para a nova consulta, depois clique com o botão direito na consulta e selecione Executar
  • Se estiveres a usar Visual Studio 2010
    • Selecionar Dados -> Editor Transact SQL -> Nova Ligação de Consulta...
    • Introduza .\SQLEXPRESS como nome do servidor e clique em OK
    • Selecione a base de dados EntitySplitting na lista pendente no topo do editor de consultas.
    • Copie o SQL seguinte para a nova consulta, depois clique com o botão direito 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 Novo e clique em Projeto.
  • No painel esquerdo, clique em Visual C# e depois selecione o modelo de Aplicação de Consola .
  • Introduza MapEntityToTablesSample como nome do projeto e clique em OK.
  • Clique em Não se for solicitado para guardar a consulta SQL criada na primeira secção.

Criar um Modelo baseado na Base de Dados

  • 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.
  • Introduza MapEntityToTablesModel.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.
  • Selecione a ligação EntitySplitting no menu suspenso e clique em 'Next'.
  • Na caixa de diálogo Escolher os Seus Objetos da Base de Dados, assinale a caixa ao lado do nó Tabelas . Isto vai adicionar todas as tabelas da base de dados EntitySplitting ao modelo.
  • Clique em Concluir.

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

Mapear uma entidade para duas tabelas

Neste passo, iremos atualizar o tipo de entidade Person para combinar dados das tabelas Person e PersonInfo .

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

  • Selecione a entidade **Pessoa** e pressione as teclas Ctrl+V .

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

  • Clique em Não quando lhe perguntam se quer remover a tabela PersonInfo do modelo, estamos prestes a mapeá-la para a entidade Person .

    Eliminar Tabelas

Os passos seguintes exigem 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 Pessoa e clique Adicionar Tabela ou Vista na janela Detalhes do Mapeamento.
  • Selecione **InformaçõesPessoais** na lista suspensa. A janela Detalhes de Mapeamento é atualizada com mapeamentos padrão de colunas, que são adequados para o nosso cenário.

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

Mapeamento 2

Usar o Modelo

  • Cole o código seguinte 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);
        }
    }
  • Compilar e executar a aplicação.

As seguintes instruções T-SQL foram executadas contra a base de dados como resultado da execução desta aplicação. 

  • As duas instruções INSERT seguintes foram executadas como resultado da execução do contexto. SaveChanges(). Eles retiram os dados da entidade Person e distribuem-nos entre as tabelas Person e PersonInfo.

    Inserir 1

    Insert 2

  • O seguinte SELECT foi executado como resultado da enumeração das pessoas na base de dados. Combina os dados das tabelas Person e PersonInfo .

    Selecione Dados de Pessoa e Informações sobre a Pessoa