Compartilhar via


Herança TPT do Designer

Esse passo a passo mostra como implementar a herança de tabela por tipo (TPT) em seu modelo usando o Entity Framework Designer (EF Designer). A herança de tabela por tipo usa uma tabela separada no banco de dados para manter dados para propriedades não herdadas e propriedades de chave para cada tipo na hierarquia de herança.

Nesse passo a passo, mapearemos as entidades Course (tipo base), OnlineCourse (deriva de Course) e OnsiteCourse (deriva de Course) para tabelas com os mesmos nomes. Criaremos um modelo a partir do banco de dados e, em seguida, alteraremos o modelo para implementar a herança TPT.

Você também pode começar com o Code First e, em seguida, gerar o banco de dados a partir do modelo. O EF Designer usa a estratégia TPT por padrão e, portanto, qualquer herança no modelo será mapeada para tabelas separadas.

Outras opções de herança

Tabela por hierarquia (TPH) é outro tipo de herança em que uma tabela de banco de dados é usada para manter dados para todos os tipos de entidade em uma hierarquia de herança.  Para obter informações sobre como mapear a herança de tabela por hierarquia com o Designer de entidade, consulte Herança TPH do EF Designer

Observe que os modelos de herança de tipo tabela por concreto (TPC) e herança mista têm suporte no runtime do Entity Framework, mas não são compatíveis com o Designer EF. Se você quiser usar TPC ou herança mista, você tem duas opções: usar Code First ou editar manualmente o arquivo EDMX. Se você optar por trabalhar com o arquivo EDMX, a janela Detalhes do mapeamento será colocada em "modo de segurança" e você não poderá usar o designer para alterar os mapeamentos.

Pré-requisitos

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

Configurar o Projeto

  • Open Visual Studio 2012.
  • Selecione Arquivo-> Novo -> Projeto
  • No painel esquerdo, clique em Visual C# e, em seguida, selecione o modelo Console.
  • Digite TPTDBFirstSample como o nome.
  • Selecione OK.

Criar um modelo

  • Clique com o botão direito do mouse no projeto no Gerenciador de Soluções e selecione Adicionar -> Novo Item.
  • Selecione Dados no menu à esquerda e selecione Modelo de Dados de Entidade ADO.NET no painel Modelos.
  • Insira TPTModel.edmx para o nome do arquivo e clique em Adicionar.
  • Na caixa de diálogo Escolher Conteúdo do Modelo, selecione** Gerar do banco de dados**e 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 suas Conexões de Dados é atualizada com suas configurações de conexões de banco de dados.
  • Na caixa de diálogo Escolher Seus Objetos de Banco de Dados, no nó Tabelas, selecione as tabelas Departamento, Course, OnlineCourse e OnsiteCourse.
  • 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.

Implementar herança de tabela por tipo

  • Na superfície de design, clique com o botão direito do mouse no tipo de entidade OnlineCourse e selecione Propriedades.
  • Na janela Propriedades, defina a propriedade Tipo Base como Curso.
  • Clique com o botão direito do mouse no tipo de entidade OnSiteCourse e selecione Propriedades.
  • Na janela Propriedades, defina a propriedade Tipo Base como Curso.
  • Clique com o botão direito do mouse na associação (a linha) entre os tipos de entidade OnlineCourse e Course. Selecione Excluir do modelo.
  • Clique com o botão direito do mouse na associação entre os tipos de entidade OnsiteCourse e Course. Selecione Excluir do modelo.

Agora excluiremos a propriedade CourseID de OnlineCourse e OnsiteCourse porque essas classes herdam CourseID do tipo base Course.

  • Clique com o botão direito do mouse na propriedade CourseID do tipo de entidade OnlineCourse e selecione Excluir do Modelo.
  • Clique com o botão direito do mouse na propriedade CourseID do tipo de entidade OnsiteCourse e selecione Excluir do Modelo
  • A herança de tabela por tipo agora está implementada.

Table Per Type

Use o modelo

Abra o arquivo Program.cs onde o método Main está definido. Cole o código a seguir na função Main. O código executa três consultas. A primeira consulta traz de volta todos os Cursos relacionados ao departamento especificado. A segunda consulta usa o método OfType para retornar OnlineCourses relacionado ao departamento especificado. A terceira consulta retorna OnsiteCourses.

    using (var context = new SchoolEntities())
    {
        foreach (var department in context.Departments)
        {
            Console.WriteLine("The {0} department has the following courses:",
                               department.Name);

            Console.WriteLine("   All courses");
            foreach (var course in department.Courses )
            {
                Console.WriteLine("     {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnlineCourse>())
            {
                Console.WriteLine("   Online - {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnsiteCourse>())
            {
                Console.WriteLine("   Onsite - {0}", course.Title);
            }
        }
    }