【发布时间】:2010-10-11 14:04:05
【问题描述】:
我是第一次访问该网站,如果标签错误或在其他地方得到回答,敬请见谅...
我在当前项目中不断遇到特殊情况,我想知道你们将如何处理它。模式是:具有一组子项的父项,并且父项具有一个或多个对子集合中特定项的引用,通常是“默认”子项。
一个更具体的例子:
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; }
}
员工肯定需要引用他们的公司,每个公司只能有一个联系人。希望这能让我原来的观点更清楚一点!
【问题讨论】: