gpt4 book ai didi

NHibernate 保存/更新事件监听器 : listening for child object saves

转载 作者:行者123 更新时间:2023-12-04 12:59:52 25 4
gpt4 key购买 nike

我有一个 Area 对象,它有许多 SubArea 子对象:

public class Area
{
...
public virtual IList<SubArea> SubAreas { get; set; }
}

child 被映射为单向非逆关系:
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 保存或更新事件监听器:
Configuration.EventListeners.SaveEventListeners = 
new ISaveOrUpdateEventListener[] { mylistener };
Configuration.EventListeners.SaveOrUpdateEventListeners =
new ISaveOrUpdateEventListener[] { mylistener };

当我保存该区域时,Mylistener 被触发 11次 : 区域一次,每个子区域两次! (我认为是因为 NHIbernate 正在插入子区域,然后使用区域外键更新)。

有谁知道我在这里做错了什么,以及如何让听众触发 一次 每个区域和子区域?

最佳答案

与您的问题并非 100% 相关,但如果您在集合上使用 inverse="true"进行映射,您至少不会得到插入和更新语句。

关于NHibernate 保存/更新事件监听器 : listening for child object saves,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com