初めてサイトにアクセスしたので、タグ付けが間違っていたり、他の場所で回答があった場合は申し訳ありません...
私は現在のプロジェクトで特定の状況に遭遇し続けています. パターンは次のとおりです。子のコレクションを持つ親であり、親は子コレクション内の特定の項目 (通常は「既定の」子) への 1 つ以上の参照を持っています。
より具体的な例:
public class SystemMenu
{
public IList<MenuItem> Items { get; private set; }
public MenuItem DefaultItem { get; set; }
}
public class MenuItem
{
public SystemMenu Parent { get; set; }
public string Name { get; set; }
}
私には、これは関係をモデル化するためのきれいな方法のように思えますが、循環関連のおかげですぐに問題が発生します。循環外部キーのために DB で関係を強制できず、LINQ to SQL が原因で爆発します。循環関連。これを回避できたとしても、それは明らかに良い考えではありません。
現在、私の唯一のアイデアは、MenuItem に「IsDefault」フラグを設定することです。
public class SystemMenu
{
public IList<MenuItem> Items { get; private set; }
public MenuItem DefaultItem
{
get
{
return Items.Single(x => x.IsDefault);
}
set
{
DefaultItem.IsDefault = false;
value.DefaultItem = true;
}
}
}
public class MenuItem
{
public SystemMenu Parent { get; set; }
public string Name { get; set; }
public bool IsDefault { get; set; }
}
誰かが同様のことを扱い、アドバイスを提供できますか?
乾杯!
編集:これまでの回答に感謝します。おそらく「メニュー」の例は素晴らしいものではありませんでしたが、代表的なものを考えようとしていたので、自明ではないドメインの詳細に入る必要はありませんでしたモデル!おそらくより良い例は、会社/従業員の関係でしょう:
public class Company
{
public string Name { get; set; }
public IList<Employee> Employees { get; private set; }
public Employee ContactPerson { get; set; }
}
public class Employee
{
public Company EmployedBy { get; set; }
public string FullName { get; set; }
}
従業員は間違いなく会社への参照を必要とし、各会社は 1 つの ContactPerson しか持つことができません。これにより、私の元のポイントが少し明確になることを願っています!