none
Relacionamento Um para Um RRS feed

  • Pergunta

  • 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?

    quinta-feira, 3 de dezembro de 2015 13:27

Todas as Respostas

  • Eu vejo um erro entre Filial e Pessoa? Porque: Filial não tem uma descrição e aquele registro é exclusivo de Pessoa, se eu tiver

    - Pessoa Id 1 é da Filial 1

    - Pessoa Id 2 é da Filial 1, 

    Consigo ver que tem um problema de repetição já visto que essa tabela está repetindo o código da filial e não poderia !!!

    A tabela Filial deveria ser somente só exclusivo dos seus próprios dados, essa é minha visão!

    Exemplo de Layout!

    Ou seja, FilialId está contido 1 vez em 1 campo dentro de Pessoa, porque, eu entendi uma Pessoa só vai ter uma Filial e uma Filial pode estar em várias pessoas !!!

    Endereço é relacionado diretamente na chave de Pessoa (PessoaId)



    Fulvio C


    quarta-feira, 16 de dezembro de 2015 13:57