isessionfactory fluently example nhibernate fluent-nhibernate

fluently - ¿Qué significa este error en nhibernate?



nhibernate download c# (6)

De la nada, recibo este error cuando hago varias actualizaciones usando nhibernate.

La fila fue actualizada o eliminada por otra transacción (o la asignación de valores sin guardar fue incorrecta): [MyDomainObject]

No hay información adicional en el error. ¿Hay alguna forma recomendada de ayudar a identificar el problema de la raíz o alguien me puede dar una mejor explicación de lo que indica este error o es un síntoma alrededor?

Alguna información adicional

Miré el objeto y todos los datos se ven bien, tienen una identificación, etc. .

Tenga en cuenta que esto se está ejecutando en una sola pila de llamadas desde un sitio web asp.net-mvc, por lo que no esperaría que haya problemas de subprocesos en los que preocuparse en términos de concurrencia.


Mi problema fue este:

[Bind(Include="Name")] EventType eventType

Debería haber sido:

[Bind(Include="EventTypeId,Name")] EventType eventType

Al igual que otras respuestas sugieren que nhibernate estaba usando cero como el id para mi entidad.


NHibernate tiene un objeto, theObject . theObject.Id tiene un valor de 42 . NHibernate nota que el objeto está sucio. La identificación del objeto es diferente del valor no guardado, que es cero (0) para las claves primarias enteras. Entonces, NHibernate emite una declaración de actualización, pero no se actualizan filas, lo que significa que no hay una fila en la base de datos para ese tipo de objeto con un Id . De 42 . Así que el objeto ha sido eliminado sin que NHibernate lo sepa. Esto podría suceder dentro de otra transacción (por ejemplo, tiene problemas con la hebra) o si alguien (u otra aplicación) eliminó / alteró la fila usando SQL directamente contra la base de datos.

La otra posibilidad es que tu valor no guardado sea incorrecto. por ejemplo, está utilizando -1 para indicar una entidad sin guardar, pero su asignación tiene un valor sin guardar de cero. Esto es poco probable ya que su aplicación generalmente funciona a partir de los sonidos de la misma. Si el valor no guardado fuera incorrecto, no habría podido guardar ninguna entidad en la base de datos, ya que NHibernate habría estado emitiendo declaraciones UPDATE cuando debería haber estado emitiendo INSERT .


Si tienes un disparador en la mesa, puede ser la razón. En este caso, agregue dentro de ella.

SET ROWCOUNT 0; SET NOCOUNT ON;


Significa que tiene múltiples transacciones que acceden a los mismos datos, lo que genera problemas de concurrencia. Debería mejorar el manejo de su acceso a los datos; probablemente esté actualizando los datos de varios subprocesos; primero, distribuya los datos modificados en una cola que maneje todo el acceso a la base de datos.


Un post viejo, pero espero que mi información ayude a alguien. Recibía un error similar pero solo cuando persistían las asociaciones, después de haber agregado un nuevo objeto. El error fue de la forma:

NHibernate.StaleObjectStateException: la fila fue actualizada o eliminada por otra transacción (o la asignación de valores sin guardar fue incorrecta) [My.Entity # 0]

Tenga en cuenta el cero en el final, que es mi propiedad de identificador. No debería intentar guardar con la clave cero, ya que estaba usando la especificación de identidad en SQL Server (clase generadora = nativa). No había cambiado mi valor no guardado en mi xml, así que no tenía idea de cuál era el problema; por alguna razón, NHibernate estaba tratando de hacer una actualización utilizando el valor clave como 0 en lugar de guardar (y obtener la siguiente identidad clave) para mi nuevo objeto.

Al final, encontré que la causa era que estaba inicializando el número de versión a 1 para el nuevo objeto en mi constructor. A pesar de que mi propiedad del identificador era cero, por alguna razón, NHibernate también estaba buscando una propiedad de la versión de cero también, para identificarla como una instancia transitoria no guardada. El libro "NHibernate en Acción" realmente menciona esto en la página 120, pero por alguna razón, mis objetos estaban bien cuando persistía con el número de versión 1 normalmente, y solo fallaba si se guardaba un nuevo objeto a través de una asociación.

Así que asegúrese de no establecer el valor de su Versión (déjelo como cero o nulo).


Usted dice que sus datos están bien, pero verifique si, por ejemplo, está asignando la ID como autogenerada. Tuve exactamente el mismo problema, pero estaba enviando un objeto con una ID diferente de 0.

¡Espero eso ayude!