我正在尝试创建持久对象图的克隆,似乎 Session.Evict(PersistedObject) 是这样做的方法。通过从会话缓存中删除实例,我可以将其设置为新的“克隆”记录。
我尝试了三种方法,每种方法都不成功。
- 使用急切加载从数据库中获取我的对象图并尝试驱逐它。这会导致 KeyNotFoundException
- 使用 Session.Load(objectId) 并尝试驱逐它。驱逐有效,但我只有一个代理可以使用,而不是我需要的水合物体
- 使用 Session.Get(objectId) 并尝试驱逐它。这会导致 KeyNotFoundException
我一直在努力寻找有关此主题的任何真实文档或示例。我发现了一些接近的东西,但没有什么能真正解释我哪里出错了
- NHibernate Session.Evict()
- NHibernate 按 id 逐出
- http://thecuttingledge.com/?tag=nhibernate#.V1XQHZF96M8
- 如何使用 NHibernate 复制对象
- https://sonyarouje.com/2013/11/13/keynotfoundexception-from-nhibernates-session-evict/
关于最后一个链接,我检查了我的 Equals 和 GetHashCode 方法,但是在调用 Evict 时它们没有受到影响。此外, Session.Contains(objectToBeEvicted) 在 Evict() 之前返回 true
至于标题中的第二个问题——有没有更好的方法来解决这个问题?这不可能是罕见的情况
提前致谢