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:
- Uma versão recente do Visual Studio.
- O banco de dados do exemplo escolar.
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.
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);
}
}
}