实体框架 4.1 中可能共享的外键(实体中的值对象)的映射建议?
-
07-09-2020 - |
题
我有一个 Project 实体和一个 Rfi 实体。项目实体包含团队成员列表。项目是 Rfi 实体中的导航属性。在 Rfi 实体中,有一个 RecipientId。此 ID 代表 TeamMembers 集合中的一个人。想象一下,在网页上,我们有一个名为“收件人”的下拉框。该列表包括该项目的所有团队成员。用户将从该列表中选择联系人。该联系人的 ID 将保存在 RecipientsId 属性中。重新加载页面时,我们将根据 RecipeintsId 属性中的值在下拉列表中选择该用户的 Id。使用 Fluent API 在 EF 4.1 中映射此内容的最佳方法是什么?
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
}
解决方案
据我了解,你的问题是之间的映射 Rfi
和 Contect
- Project
从数据库的角度来看,在您的收件人功能中没有任何作用。
你需要 Recipient
导航属性在 Rfi
或者 Rfis
导航属性在 Contact
. 。首先是 EF 代码 需要导航属性 至少在关系的一侧。
所以你可以使用类似的东西:
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
}
和地图:
modelBuilder.Entity<Rfi>()
.HasRequired(r => r.Recipient)
.WithMany()
.HasForeignKey(r => r.RecipientId);
不隶属于 StackOverflow