Sugestão de mapeamento para uma chave estrangeira possivelmente compartilhada (objeto de valor na entidade) no Entity Framework 4.1?

StackOverflow https://stackoverflow.com/questions/6073345

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
    }
Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top