2009-11-05 15 views
6

Me he visto obligado a investigar un problema de rendimiento de la base de datos con una nueva aplicación que utiliza NHibernate. Noté que en algunas tablas NH hace una inserción de una fila seguida de una actualización de la misma fila con exactamente los mismos datos. Lo que he reunido hasta ahora es que las actualizaciones después de las inserciones se realizan en tablas que tienen relaciones de muchos a uno definidas.¿Es posible suprimir la actualización después de insertar en NHibernate?

En cualquier caso, habría esperado que NH suponga que los datos son los mismos y suprime la actualización adicional. ¿Hay alguna forma de suprimir esta actualización adicional?

+0

código? una actualización de todas las columnas después de una inserción no es normal. – dotjoe

Respuesta

6

Parece que tiene una relación bidireccional en una asociación muchos a uno.

La solución a ese problema es agregar inverse="true" en el lado uno-a-muchos de la relación. Here is an example.

El inserto es realizado por el niño guardando sus datos. La actualización la realiza el padre que establece el parentId del registro secundario en la base de datos. Si la relación era unidireccional, la primera inserción no tendría parentId y se requeriría la actualización. Con una relación bidireccional, la actualización es superflua como usted describe. El inverse="true" le dice al padre que el niño es responsable de mantener la relación, lo que impide la actualización adicional.

+3

-1 porque esto ocurre en relaciones no bidireccionales. – BradLaney

Cuestiones relacionadas