EF が PK/FK 関係で「循環参照」を許可しない理由を理解しています。次のシナリオを機能させるためにモデルを変更する方法についてのアドバイスを探しています。
シナリオ
3 つのエンティティ: 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
循環参照を引き起こします。
実験
私が最初に考えたのは、双方向の仮想プロパティが原因だったので、2 つのうちの 1 つを一方向の関係を持つ最上位エンティティに指定することにしました。
まず、WorkRecord
最上位エンティティとして指定し、エンティティWorkRecords
から仮想参照参照を削除しEmployee
ます...同じメッセージが生成されます。
次に、Employee
トップレベルのエンティティを作成し、その仮想コレクションを残して、エンティティから仮想参照プロパティWorkRecords
を削除しました...正常に動作しますが、私の目標は達成されません。Employee
WorkRecord
さらに調査した結果、両方のエンティティのエージェンシー仮想参照プロパティが循環参照の原因であることがわかりました。1 つのエンティティがこれを削除すると、Employee
/WorkRecord
エンティティの関係が全方向に作用します。
質問:
ですから、私が尋ねることができるように明確に - WorkRecord
EF5 を混乱させることなく、トップレベルのエンティティとして使用して、このビジネス モデルを表現するにはどうすればよいでしょうか?