How to map the Relationship to the base class in Table per Type (TPT)

2

I have the following scenario:

Eachentityinthishierarchyhasitstable.But,nowIneedtoregisteraPersonwithaCitywhereshelives.

HowdoImaptorecordaCityinaPerson?

PersonClass

publicabstractclassPessoa{publicintId{get;set;}publicCidadeCidade{get;set;}}

ClassCity

publicclassCidade{...publicintId{get;set;}publicstringNome{get;set;}}

IndividualClass

publicclassPessoaFisica:Pessoa{...publicstringCpf{get;set;}}

LegalClass

publicclassPessoaJuridica:Pessoa{...publicstringCnpj{get;set;}}

PersonMapping:

publicclassPessoaConfiguracao:EntityTypeConfiguration<Pessoa>{...//tableToTable("pessoa");

    //relationships
    //CIDADE???
}

Mapping City:

public class CidadeConfiguracao: EntityTypeConfiguration<Cidade>
    {
        public CidadeConfiguracao()
        {
            //Key
            HasKey(c => c.Id);

            //fields
            Property(c => c.Nome).HasColumnName("Nome").HasMaxLength(50).IsRequired();

            //table
            ToTable("cidade");

            //relationship
            HasRequired<Estado>(s => s.Estado)
                .WithMany(s => s.Cidades).HasForeignKey(s => s.IdEstado);
        }

    }
    
asked by anonymous 20.01.2016 / 01:10

1 answer

0

To map the relationship of the base class Person to City so that the PersonFisica and PersonJuridica derived classes can be written to their respective cities, it was necessary to add a collection / list of people property in the City class:

public class Cidade
{
    ...
    public int Id { get; set; }
    public string Nome { get; set; }
    public ICollection<Pessoa> Pessoas { get; set; }
}

Then change the Person mapping:

public class PessoaConfiguracao: EntityTypeConfiguration<Pessoa>
{
    ...
    //table
    ToTable("pessoa");

    //relationships
    HasRequired(p => p.Cidade).WithMany(p => p.Pessoas).Map(m => m.MapKey("CidadeId"));
}
    
27.01.2016 / 15:30