私は(今のところ)になってしまったソリューション...モデルで
:
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");
そして私は見ることにより、円形のrefのを防ぎます偽の場合:
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 ISは非正規化されていますが、新しい依存オブジェクトを作成して、各チケットの従属/前提条件チケットのリストに値を設定してからチェックを行う必要はありません。今のところこの方法を簡単にコーディングすることができます。しかし、提案にオープン!
すぐにこれを試してみましょう...今すぐ他の火事があります。 ;) – Handprint
重複するEvent_idについて不平を言うFluentConfigurationExceptionがあります。 .AsBag()の直前に.ChildKeyColumn( "TheEvent")を追加しました。あなたはどのように実行可能であるかが分かります。 – Handprint
はい - IDの設定によっては、列のデフォルトの一部を無効にする必要があります。 – Fourth