多くの SubArea 子を持つ Area オブジェクトがあります。
public class Area
{
...
public virtual IList<SubArea> SubAreas { get; set; }
}
子は一方向の非反転関係としてマッピングされます。
public class AreaMapping : ClassMap<Area>
{
public AreaMapping()
{
HasMany(x => x. SubAreas).Not.Inverse().Cascade.AllDeleteOrphan();
}
}
エリアは私の集約ルートです。領域 (例: Session.Save(area) ) を保存すると、領域が保存され、子 SubArea が自動的にカスケードされます。
保存または更新イベント リスナーを追加して、エリアやサブエリアが永続化されるたびにキャッチしたいと考えています。たとえば、5 つのサブエリアがあるエリアがあるとします。SaveEventListeners にフックすると、次のようになります。
Configuration.EventListeners.SaveEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
エリアを保存すると、Mylistener はエリアに対して1 回だけ起動されます (サブエリアは無視されます)。イベントリスナーで5つのサブエリアもキャッチしたい。代わりに SaveOrUpdateEventListeners にフックすると:
Configuration.EventListeners.SaveOrUpdateEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
領域を保存すると、Mylistener はまったく起動しません。奇妙なことに、SaveEventListenersとSaveOrUpdateEventListenersにフックすると、次のようになります。
Configuration.EventListeners.SaveEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
Configuration.EventListeners.SaveOrUpdateEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
エリアを保存すると、Mylistener が11 回起動されます。エリアごとに 1 回、サブエリアごとに 2 回です。(NHIbernate が SubArea を INSERT してから、エリアの外部キーで UPDATING しているためだと思います)。
ここで私が間違っていること、および各エリアとサブエリアに対してリスナーを1回起動させる方法を知っている人はいますか?