我結束了(到目前爲止)的解決方案......
在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