我想创建一个持久对象图的克隆,它似乎像Session.Evict(PersistedObject)是这样做的方式。通过从Session缓存中删除实例,我可以将其设置为新的“克隆”记录。必须Nhibernate Session.Evict()作用于代理对象吗? (或者是有克隆持久对象图的替代方法?)
我尝试了三种方法,每种方法都不成功。
- 使用急切加载从数据库中获取我的对象图并尝试将其退出。这会导致KeyNotFoundException异常
- 使用Session.Load(objectId)并尝试将其驱逐出去。 Evict的作品,但我只有一个代理工作,而不是我需要的水合物体
- 使用Session.Get(objectId)并尝试将它驱除。这导致KeyNotFoundException
我一直在努力寻找关于此主题的任何真实文档或示例。我发现了一些接近,但没有真正解释了我要去哪里错了
- NHibernate Session.Evict()
- NHibernate evict by id
- http://thecuttingledge.com/?tag=nhibernate#.V1XQHZF96M8
- How do I copy an object with NHibernate
- https://sonyarouje.com/2013/11/13/keynotfoundexception-from-nhibernates-session-evict/
随着关于最后一个链接,我检查了我的Equals和GetHashC ode方法,但在调用Evict时不会受到影响。另外,Session.Contains(objectToBeEvicted)在Evict之前返回true()
至于标题中的第二个问题 - 是否有更好的方法来解决这个问题?这不可能是这样一个难得的场景
在此先感谢
谢谢,我会看看 –