我理解为什么 EF 在 PK/FK 关系中不允许“循环引用”。我正在寻找有关如何更改我的模型以使以下场景起作用的建议。
设想
三个实体:Employee
, Agency
, WorkRecord
. 他们的目的是记录员工花在工作上的时间。Employee
然后包含对Agency
他/她所雇用的人的引用,以及他/她对所做工作的WorkRecord
引用。Agency
public class Employee
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int AgencyId { get; set; }
public virtual Agency Agency { get; set; }
public virtual IEnumerable<WorkRecord> WorkRecords { get; set; }
}
public class Agency
{
[Key]
public int Id { get; set; }
}
public class WorkRecord
{
[Key]
public int Id { get; set; }
public int Hours { get; set; }
public int AgencyId { get; set; }
public virtual Agency Agency { get; set; }
public int EmployeeId { get; set; }
public virtual Employee { get; set; }
}
像这样,它会发牢骚:FK_dbo.WorkRecords_dbo.Employees_EmployeeId
导致循环引用。
实验
我的第一个想法是因为双向虚拟属性,所以我决定将两者中的一个指定为具有单向关系的顶级实体:
首先,我将其指定WorkRecord
为顶级实体并WorkRecords
从实体中删除虚拟引用引用Employee
......产生了相同的消息。
其次,我制作Employee
了顶级实体,留下了它的虚拟WorkRecords
集合,并Employee
从实体中删除了虚拟引用属性WorkRecord
......工作正常,但没有达到我的目标。
经过更多调查,我发现是两个实体上的代理虚拟引用属性导致了循环引用。如果一个实体将其删除,则Employee
/WorkRecord
实体关系将在所有方向上起作用。
问题:
所以,我可以问清楚 - 我如何表达这种商业模式,WorkRecord
作为我的顶级实体,而不会让 EF5 不安?