Sugestão de mapeamento para uma chave estrangeira possivelmente compartilhada (objeto de valor na entidade) no Entity Framework 4.1?
-
07-09-2020 - |
Pergunta
Eu tenho uma entidade Project e uma entidade Rfi.A entidade do projeto contém uma lista de TeamMembers.Projeto é uma propriedade de navegação na entidade Rfi.Na entidade Rfi existe um RecipientId.Este ID representa uma pessoa da coleção TeamMembers.Então imagine que em uma página da web temos uma caixa suspensa chamada Destinatário.A lista inclui todos os membros da equipe do Projeto.O usuário selecionará um contato dessa lista.O Id desse contato será salvo na propriedade RecipientsId.Quando a página for recarregada, selecionaremos o Id desse usuário no menu suspenso com base no valor da propriedade RecipeintsId.Qual é a melhor maneira de mapear isso no EF 4.1 usando a API fluente?
public class Project : BaseEntity
{
public string ProjectNumber { get; set; }
public string Description { get; set; }
public string CreatedBy { get; set; }
public string ModifiedBy { get; set; }
public string Currency { get; set; }
#region Navigation Properties
public Guid AddressId { get; set; }
public virtual Address Address { get; set; }
public Guid CompanyCodeId { get; set; }
public virtual CompanyCode CompanyCode { get; set; }
public virtual ICollection<Contact> TeamMembers { get; set; }
#endregion
}
public class Rfi : Document
{
public string Number { get; set; }
public string Subject { get; set; }
public string SubcontractorRfiReference { get; set; }
public string SpecificationSection { get; set; }
public RfiStatus RfiStatus { get; set; }
public Guid RecipientId { get; set; }
#region Navigation Properties
public Guid ProjectId { get; set; }
public Project Project { get; set; }
#endregion
}
Solução
Pelo que entendi, seu problema é mapear entre Rfi
e Contect
- Project
não tem nenhuma função na funcionalidade do destinatário da perspectiva do banco de dados.
Você também precisa Recipient
propriedade de navegação em Rfi
ou Rfis
propriedade de navegação em Contact
.Código EF primeiro precisa de propriedade de navegação em pelo menos um lado da relação.
Então você pode usar algo como:
public class Rfi : Document
{
public string Number { get; set; }
public string Subject { get; set; }
public string SubcontractorRfiReference { get; set; }
public string SpecificationSection { get; set; }
public RfiStatus RfiStatus { get; set; }
#region Navigation Properties
public Guid RecipientId { get; set; }
public Contact Recipient { get; set; }
public Guid ProjectId { get; set; }
public Project Project { get; set; }
#endregion
}
E mapa:
modelBuilder.Entity<Rfi>()
.HasRequired(r => r.Recipient)
.WithMany()
.HasForeignKey(r => r.RecipientId);