具有相同标识符值的不同对象已与会话关联:10,实体:Sales.Entities.Ttable1

时间:2012-02-06 12:36:13

标签: nhibernate

当我使用session.update(object)时,我得到以下错误,我该如何纠正这个错误? 我甚至尝试过Session.evict(对象)仍然没有解决以下错误

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

3 个答案:

答案 0 :(得分:17)

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

使用Session.Merge(object)

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

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

答案 1 :(得分:4)

你想要完成什么,这个错误意味着你正在尝试更新一个hibernate已经拥有内部缓存的对象但是你正在发送一个不同的对象引用。

使用Session.Merge是可能的,但在大多数情况下,如果您在Web上下文中,您应该已经在某处使用了引用,因为您最有可能在每个请求中使用Session。所以问题是:

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

答案 2 :(得分:-6)

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