1
resposta

Relacionamento Um para Um usando Entity Core 2.0.1

Olá. Já terminei o curso de completo de Entity Core, porém estou com dificuldades de criar relacionamentos 1:1. Exemplo: Tabela Pessoa (IdPessoa,Tipo) Tabela PessoaFisica (IdPessoaFisica (FK,PK de Pessoa),Nome,CPF,RG) Tabela PessoaJuridica (IdPessoaJuridica(FK,PK de Pessoa),RazaoSocial,NomeFantasia)

O que eu pretendo é que criar uma chave estrangeira de Pessoa nas tabelas de PessoaFisica e PessoaJuridica. Sendo que vai ser Primary Key também. O que eu não quero, é ter que criar uma chave primária auto incremento nas tabelas de PessoaFisica e de PessoaJuridica. Não tem necessidade disso para esse relacionamento. Porem estou tendo uma dificuldade em criar esse relacionamento. Eu estou usando PessoaConfiguration, PessoaFisicaConfiguration e PessoaJuridicaConfiguration no Contexto e tenho as classes de Pessoa, PessoaFisica com herança de Pessoa e PessoaJuridica com herança de Pessoa também. Podem me ajudar ?? Como ficaria isso usando as classe no C# e o Entity Core ??

1 resposta

Olá Maurício,

o problema neste formato de implementação que você deseja é que por enquanto ainda não tem como fazer com o entity core por limitação do framework.

Basicamente se entendi você tem uma estrutura de herança com uma classe mãe Pessoa e duas filhas, PessoaFísica e PessoaJurídica. E no banco gostaria que isso fosse traduzido como 3 tabelas, uma tabela Pessoa que terias todos as informações da mãe, incluindo o id. E uma tabela para cada filha, fazendo referência de fk para a tabela mãe mais os atributos específicos da filha. Esse padrão de tradução da herança para tabelas nesse formato é o que chamamos de table per type (TPT), ou seja, uma tabela para cada tipo/classe.

O problema é que o entity core ainda não implementou o padrão TPT, tem esse link com a discussão que rola desde 2015 até hoje se faz sentido e o quão importante é ter o TPT no core.

Uma opção para contornar isso seria não usar a herança, mas sim a composição. Que por sinal, é até uma boa prática em orientação a objetos preferir composição ao invés da herança. Suas classes PessoaFisica e PessoaJuridica não herdariam de Pessoa, ao invés disso cada uma teria na verdade uma propriedade Pessoa, com quem elas fazem o relacionamento 1 para 1, igual o mostrado no curso. E para você não perder o polimorfismo, teria que criar uma interface IPessoa que padroniza as propriedades e métodos comuns entre PessoaFisica e PessoaJuridica.