Compartilhar via


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.

EF Designer

Pré-requisitos

Para concluir esta explicação passo a passo, será necessário:

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.

    Mapping Properties

  • 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

    Insert Combining Person and HireInfo Data

  • O SELECT a seguir foi executado como resultado da execução do contexto. People.FirstOrDefault() e seleciona apenas as colunas mapeadas para Person

    Select 1

  • O SELECT a seguir foi executado como resultado do acesso à propriedade de navegação existingPerson.Instructor e seleciona apenas as colunas mapeadas para HireInfo

    Select 2