2012-02-06 22 views
6

Cuando uso session.update (object) obtengo el siguiente error y ¿cómo puedo rectificar este error? Incluso he intentado Session.evict (objeto) todavía no se resuelve para el siguiente errorun objeto diferente con el mismo valor de identificador ya estaba asociado con la sesión: 10, de entidad: Sales.Entities.Ttable1

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

¡Marque la respuesta correcta! – Joel

Respuesta

17

Es el uso de una aplicación web?

Uso Session.Merge(object)

En las aplicaciones web que a veces serializar y deserializar objetos, entonces usted lo que crea nuevos objetos, por lo que incluso si los objetos de NHibernate tiene el mismo ID, la referencia al objeto es diferente. Luego intenta actualizar su objeto deserializado, NHibernate detecta otro objeto con el mismo ID pero diferente puntero de referencia, por lo tanto, no sabe qué objeto en su memoria es el "correcto".

El método Merge() se utiliza en estos casos, por lo que puede actualizar los objetos que se encuentren en su aplicación web.

4

Lo que está tratando de lograr, el error significa que está tratando de actualizar un objeto que hibernate ya tiene su caché interna pero está enviando una referencia de objeto diferente.

Usar Session.Merge es una posibilidad, pero en la mayoría de los casos, si se encuentra en un contexto web, ya debería tener la referencia en alguna parte, ya que es muy probable que utilice Session por solicitud. Entonces la pregunta es:

  • ¿Por qué tiene el objeto que intenta guardar en la memoria caché pero no lo usa?
-6

Use Session.Clear() antes de Session.Update (object).

+7

El método Clear borra la unidad de trabajo (si hay cambios no eliminados, se descartarán) y se comporta como si llamaras a 'Evict' en todas las instancias cargadas en la sesión. Está ocultando el problema al eliminar el síntoma. ¡Cual es malo! –

Cuestiones relacionadas