Zuordnungsvorschlag für einen möglicherweise gemeinsam genutzten Fremdschlüssel (Wertobjekt in der Entität) in Entity Framework 4.1?
-
07-09-2020 - |
Frage
Ich habe eine Projektentität und eine Rfi-Entität.Die Projektentität enthält eine Liste von TeamMembers.Projekt ist eine Navigationseigenschaft in der Rfi-Entität.In der Rfi-Entität gibt es eine RecipientId.Diese ID stellt eine Person aus der TeamMembers-Sammlung dar.Stellen Sie sich also vor, wir haben auf einer Webseite ein Dropdown-Feld mit dem Namen „Empfänger“.Die Liste enthält alle Teammitglieder des Projekts.Der Benutzer wählt einen Kontakt aus dieser Liste aus.Die ID dieses Kontakts wird in der Eigenschaft RecipientsId gespeichert.Wenn die Seite neu geladen wird, wählen wir die ID dieses Benutzers im Dropdown-Menü basierend auf dem Wert in der Eigenschaft RecipeintsId aus.Was ist der beste Weg, dies in EF 4.1 mithilfe der Fluent-API abzubilden?
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
}
Lösung
Soweit ich weiß, besteht Ihr Problem in der Zuordnung zwischen Rfi
Und Contect
- Project
spielt aus Datenbanksicht keine Rolle in Ihrer Empfängerfunktionalität.
Sie brauchen beides Recipient
Navigationseigenschaft in Rfi
oder Rfis
Navigationseigenschaft in Contact
.EF-Code zuerst Benötigt Navigationseigenschaft auf mindestens einer Seite der Beziehung.
Sie können also etwas verwenden wie:
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
}
Und Karte:
modelBuilder.Entity<Rfi>()
.HasRequired(r => r.Recipient)
.WithMany()
.HasForeignKey(r => r.RecipientId);