Suggerimento di mappatura per una chiave esterna eventualmente condivisa (oggetto valore in entità) in Entity Framework 4.1?
-
07-09-2020 - |
Domanda
Ho un'entità del progetto e un'entità RFI.L'entità del progetto contiene un elenco di teamMembers.Il progetto è una proprietà di navigazione nell'entità RFI.Nell'entità RFI c'è un destinatario.Questo ID rappresenta una persona dalla collezione TeamMembers.Quindi immagina, su una pagina web, abbiamo una casella a discesa denominata destinatario.L'elenco include tutti i membri del team del progetto.L'utente selezionerà un contatto da quell'elenco.L'ID di tale contatto sarà salvato nella proprietà destinatari.Quando la pagina viene ricaricata, selezioneremo l'ID di quell'utente nel discesa in base al valore nella proprietà RiceveinsId.Qual è il modo migliore per mappare questo in EF 4.1 usando l'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
}
. Soluzione
Come capisco che il tuo problema è la mappatura tra Rfi
e Contect
- Project
non ha alcun ruolo nella funzionalità destinatario dal punto di vista del database.
È necessaria una proprietà di navigazione Recipient
in Rfi
o Rfis
Navigation Proprietà in Contact
.Codice EF First Ha bisogno di proprietà di navigazione su almeno un lato della relazione.
Quindi puoi usare qualcosa come:
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 la mappa:
modelBuilder.Entity<Rfi>()
.HasRequired(r => r.Recipient)
.WithMany()
.HasForeignKey(r => r.RecipientId);
.