我结束了(到目前为止)的解决方案......
在Model:
public virtual IList<Event> Dependencies{ get; set; }
public virtual IList<Event> Prerequisites{ get; set; }
在映射:
HasManyToMany(x => x.Dependencies)
.Table("Dependencies")
.ChildKeyColumn("Dependent");
HasManyToMany(x => x.Prerequisites)
.Table("Prerequisites")
.ChildKeyColumn("Prerequisite");
我阻止圆形裁判的看对于虚假来源:
private bool IsPrerequisiteEvent(Event dependent, Event prereq)
{
bool isPrereq = false;
if (prereq == null)
isPrereq = false;
else if (dependent.Id == prereq.Id)
isPrereq = true;
else
{
int i = 0;
while (!isPrereq && i < dependent.PrerequisiteEvents.Count)
{
isPrereq |= IsPrerequisiteEvent(dependent.PrerequisiteEvents[i], prereq);
i++;
}
}
return isPrereq;
}
private bool IsDependentEvent(Event prereq, Event dependent)
{
bool isDependent = false;
if (prereq == null)
isDependent = false;
else if (dependent.Id == prereq.Id)
isDependent = true;
else
{
int i = 0;
while (!isDependent && i < dependent.DependentEvents.Count)
{
isDependent |= IsDependentEvent(prereq, dependent.DependentEvents[i]);
i++;
}
}
return isDependent;
}
这种方法存在折衷:db是非规格化的,但我不必创建新的依赖项对象并填充每张票据的依赖/ prereq票据列表,然后执行我的检查。目前看起来似乎更容易编码。开放给建议,但!
我马上试试这个......现在有其他火灾。 ;) – Handprint 2012-03-05 17:36:55
我有一个FluentConfigurationException抱怨重复的Event_id。在.AsBag()之前添加了.ChildKeyColumn(“TheEvent”)。将保持你张贴如何可行的结果。 – Handprint 2012-03-05 18:52:56
是的 - 根据您的ID设置,您可能需要覆盖一些列的默认设置。 – Fourth 2012-03-05 21:33:15