2010-08-02 8 views
12

Tengo un caso de uso en el que un usuario obtiene una lista de productos y puede seleccionar varios productos y activarlos o desactivarlos.Nhibernate - ¿Actualizar campo individual sin cargar la entidad?

El modelo para esta lista es inmutable, y tengo un repositorio que toma una lista del modelo que debe desactivarlos a todos.

Tengo otro modelo completo de edición de productos, pero prefiero no tener que cargar cientos de ellos para simplemente cambiar una columna.

Estoy considerando el uso de Session.CreateQuery, pero ¿hay una mejor manera de lograr esto?

Respuesta

31

HQL es el camino a seguir.

Session.CreateQuery("update Product set Active = :active where id in (:ids)") 
     .SetParameter("active", active) 
     .SetParameterList("ids", listOfSelectedProductIds) 
     .ExecuteUpdate(); 
+3

¿Hay alguna manera sin HQL? Me gustaría utilizar las asignaciones ya en su lugar en lugar de escribir consultas en línea, que era la idea detrás de un ORM en primer lugar. –

+0

@ Mr.TA ¿qué problema tienes con HQL? ¿Qué tienen que ver las consultas con la elección arquitectónica de un ORM? ¿Cómo lo harías? –

+7

Uno de los propósitos principales de un ORM es evitar las consultas. Su solución combina todos los antipatrones en un solo paquete: 1) declaración de base de datos en línea; 2) usar una enorme capa de abstracción - NH - para llamar esencialmente una declaración SQL fácil - sin una buena razón y con un costo enorme; 3) no usar las asignaciones del modelo de datos. (por favor, no te ofendas) –

Cuestiones relacionadas