执行的基本顺序:
PersistentObjects
的集合,然后与会话分开缓存。session.Lock(obj, LockMode.None)
)。SaveOrUpdate
UserSetting
个session.Flush()
对象,其中包含初始化操作的用户的一些使用情况统计信息。NonUniqueObjectException
NHibernate会抛出obj = session.Get(obj.GetType(), (obj as PersistentObject).Id);
。我发现解决此问题的一种方法是使用以下命令获取对象的新副本:
session.Lock
而不是使用PersistentObject
重新附加。但是,这不是最佳的,因为一些记录集可能非常大,并且单独重新获取每个对象可能会成为性能拖累。
非唯一的对象是仅在UserSetting
类而不是{{1}}类上存在的引用对象。所以我无法理解为什么刷新会导致这种异常。
我已经尝试在模块完成之后驱逐缓存的对象,但这没有帮助。
是否有人知道将对象附加到会话中以避免此问题的更好方法?
答案 0 :(得分:3)
您是否可以使用新会话(或交易)处理每个项目并更新UserSetting?这可能会阻止NonUniqueException。
干杯,
-Maarten