0

我正在尝试创建持久对象图的克隆,似乎 Session.Evict(PersistedObject) 是这样做的方法。通过从会话缓存中删除实例,我可以将其设置为新的“克隆”记录。

我尝试了三种方法,每种方法都不成功。

  1. 使用急切加载从数据库中获取我的对象图并尝试驱逐它。这会导致 KeyNotFoundException
  2. 使用 Session.Load(objectId) 并尝试驱逐它。驱逐有效,但我只有一个代理可以使用,而不是我需要的水合物体
  3. 使用 Session.Get(objectId) 并尝试驱逐它。这会导致 KeyNotFoundException

我一直在努力寻找有关此主题的任何真实文档或示例。我发现了一些接近的东西,但没有什么能真正解释我哪里出错了

关于最后一个链接,我检查了我的 Equals 和 GetHashCode 方法,但是在调用 Evict 时它们没有受到影响。此外, Session.Contains(objectToBeEvicted) 在 Evict() 之前返回 true

至于标题中的第二个问题——有没有更好的方法来解决这个问题?这不可能是罕见的情况

提前致谢

4

2 回答 2

1

要回答最初的问题:

不,Evict()不限于对代理进行操作,它可以从会话中删除任何对象。如果您遇到某种异常,很可能您做错了什么,但问题没有包含足够的信息来弄清楚是什么。

于 2016-06-07T22:25:12.723 回答
0

尝试对您的对象进行深度克隆(.Net Deep cloning - what is the best way to do that?),然后将其添加到会话中。

于 2016-06-07T08:38:59.377 回答