【发布时间】:2010-12-30 17:54:35
【问题描述】:
我有一个 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 正在插入子区域,然后使用区域外键进行更新)。
有谁知道我在这里做错了什么,以及如何让听众为每个区域和子区域触发一次?
【问题讨论】:
-
你解决了吗?有同样的问题
-
我也是!有人找到解决方案了吗?
标签: nhibernate events event-handling children event-listener