当我使用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
答案 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()。