我第一次在该网站上,如果它被错误地标记或在其他地方得到回答,我深表歉意......
我在当前项目中不断遇到特殊情况,我想知道你们将如何处理它。模式是:具有子集合的父级,并且父级具有对子集合中特定项目的一个或多个引用,通常是“默认”子级。
一个更具体的例子:
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; }
}
对我来说,这似乎是一种很好的关系建模方式,但是由于循环关联,我无法在数据库中强制执行关系,并且由于循环外键,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; }
}
Employee 肯定需要引用他们的 Company,并且每个 Company 只能有一个 ContactPerson。希望这能让我的原点更清楚一点!