我有一个 Area 对象,它有许多 SubArea 孩子:
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) )时,该区域被保存并且子 SubAreas 自动级联。
我想添加一个保存或更新事件侦听器,以便在我的区域和/或子区域持续存在时捕获。比如说我有一个区域,它有 5 个子区域。如果我连接到 SaveEventListeners:
Configuration.EventListeners.SaveEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };
当我保存该区域时,Mylistener 只为区域触发一次(子区域被忽略)。我希望在事件侦听器中也能捕获 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 次:该区域一次,每个子区域两次!(我认为是因为 NHIbernate 正在插入子区域,然后使用区域外键进行更新)。
有谁知道我在这里做错了什么,以及如何让听众为每个区域和分区触发一次?