Boa dia pessoal.
Gostaria de saber se teria uma outra forma de tratar as classes e os mapeamentos para o seguinte modelo:
Tenho 3 classes, Pessoa, Endereco e Filial
O relacionamento entre "Pessoa X Endereço" e "Pessoa X Filial" é de um para um.
Sendo que, entre Pessoa X Endereço, a PK de Pessoa é FK e PK em Endereco
Porém entre Pessoa X Filial, a PK de pessoa é somente FK em Filial, ela tem um outro atributo PK, configurando assim um relacionamento Um para Muito.
Classes:
public class Pessoa
{
public string PessoaId { get; set; }
public virtual Endereco Endereco { get; set; }
public virtual Filial Filial { get; set; }
}
public class Endereco
{
public string PessoaId { get; set; }
public virtual Pessoa Pessoa { get; set; }
}
public class Filial
{
public short FilialId { get; set; }
public string PessoaId { get; set; }
public virtual Pessoa Pessoa { get; set; }
}
Mapeamento:
public class PessoaMap : EntityTypeConfiguration<Pessoa>
{
public PessoaMap()
{
this.HasKey(t => t.PessoaId);
this.Property(t => t.PessoaId).HasMaxLength(14);
this.ToTable("pessoa", "public");
this.Property(t => t.PessoaId).HasColumnName("documento");
this.HasRequired(t => t.Endereco).WithRequiredPrincipal(t => t.Pessoa).WillCascadeOnDelete(true);
}
}
public class EnderecoMap : EntityTypeConfiguration<Endereco>
{
public EnderecoMap()
{
this.HasKey(t => t.PessoaId);
this.Property(t => t.PessoaId).HasMaxLength(14);
this.ToTable("endereco", "public");
this.Property(t => t.PessoaId).HasColumnName("pessoa");
this.HasRequired(t => t.Pessoa).WithRequiredPrincipal();
}
}
public class FilialMap : EntityTypeConfiguration<Filial>
{
public FilialMap()
{
this.HasKey(t => t.FilialId);
this.Property(t => t.PessoaId).HasMaxLength(14);
this.ToTable("filial", "public");
this.Property(t => t.FilialId).HasColumnName("codigo");
this.Property(t => t.PessoaId).HasColumnName("pessoa");
Property(x => x.PessoaId)
.HasColumnAnnotation(
"Index", new IndexAnnotation(
new IndexAttribute("Idx_FilialPessoa") { IsUnique = true }));
this.HasRequired(t => t.Pessoa)
.WithMany(t => t.Filiais).HasForeignKey(t => t.PessoaId);
}
}
No mapeamento entre "Pessoa X Endereco" tenho o relacionamento Um para Um.
Porém no mapeamento entre "Pessoa X Filial", além do relacionamento Um para Muitos eu Criei um índice único com o atributo PessoaId.
Serie essa a forma correta de tratamento ou teria uma outra forma sem sair modelagem especificada?