2012-02-06 41 views
6

当我使用session.update(object)时,我得到以下错误,我该如何纠正此错误? 我甚至试过Session.evict(对象),但仍然是一个没有解决的下面的错误具有相同标识符值的不同对象已与会话相关联:10,实体:Sales.Entities.Ttable1

a different object with the same identifier value was already associated with the   session: 10, of entity: Sales.Entities.TTable 
+1

请标记为正确的答案! – Joel 2014-03-25 16:36:16

回答

17

是您的应用程序的Web应用程序?

使用Session.Merge(object)

在Web应用程序中你有时会进行序列化和反序列化对象,那么你这样做,你创建新的对象,所以即使NHibernate的对象具有相同的ID,对象引用是不同的。然后你尝试更新你的反序列化对象,NHibernate检测到具有相同ID但不同引用指针的另一个对象,因此不知道你的内存中哪个对象是“正确”的。

在这些情况下使用Merge()方法,因此您可以更新Web应用程序中的对象。

4

你想完成什么,错误意味着你试图更新一个对象,即休眠已经有它的内部缓存,但你发送一个不同的对象引用。

使用Session.Merge是一种可能性,但在大多数情况下,如果您处于Web上下文中,则应该已经在某处引用了该引用,因为您很可能使用了Session请求。所以问题是:

  • 为什么你有试图保存在缓存但不使用它的对象?
-6

在Session.Update(object)之前使用Session.Clear()。

+7

Clear方法清除工作单元(如果有未刷新的更改,它们将被丢弃),它的行为就如同在会话中加载的所有实例上调用了“Evict”一样。通过消除症状来隐藏问题。哪个不好! – 2013-02-23 23:29:08

相关问题