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

Asked

Viewed 108 times

2

I have the following scenario:

inserir a descrição da imagem aqui

Each entity in this hierarchy has its table. But, now I need to register a Person with a City where she lives.

How to map so I can record a City in a Person?

Classe Pessoa

public abstract class Pessoa
{
    public int Id { get; set; }
    public Cidade Cidade { get; set; }
}

City Class

public class Cidade
{
    ...
    public int Id { get; set; }
    public string Nome { get; set; }
}

Class Individual

public class PessoaFisica: Pessoa
{
    ...
    public string Cpf { get; set; }
}

Class Legal Person

public class PessoaJuridica: Pessoa
{
    ...
    public string Cnpj { get; set; }
}

Mapping Pessoa:

public class PessoaConfiguracao: EntityTypeConfiguration<Pessoa>
{
    ...
    //table
    ToTable("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);
        }

    }

1 answer

0


To map the relationship of the base class Person to City so that derived classes Personal and Personal can be recorded with their respective cities it was necessary to add a collection property/list of people 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"));
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.