Cuestión : Problema del escondrijo de Nhibernate mientras que usa disparadores de MS-SQL

¡Hey! el

I usar Nhibernate con fluido, persistir una base de datos expresa del ms SQL 2008 en un negocio application.

I tiene una clase nombrada Receipt que contenga una lista con muchos objetos nombrados ReceiptItems. el usuario del
The puede crear un recibo, agregar Receiptitems a él, y corregirlo mientras su pieza no marcada de Finished.
This trabaje bien y ahorre al DB correctamente.
Now para el problema: el

I también tiene un disparador en el recibo de la tabla del sql, de que los fuegos si insertado. Finished son precios de los alcances del disparador de true.
The los nuevos de la “tabla del surtidor”, y ponen al día los precios para todo el ReceiptItems,
in el ReceiptItems table.

When que llama el then
transaction del
and del
session.SaveorUpdate (value). Confiar () las causas de estes 3ultimo del

the la excepción: el
StaleObjectStateException
Row era actualizado o suprimido otra transacción (o trazando del unsaved-valor era incorrecto) en ReceiptItems



Removing el ofcourse del disparador fija el problema, pero lo necesito poner al día los precios. ¿Hay manera para que el nhibernate no haga caso del
error, y restaura su escondrijo después de los fuegos del disparador? definiciones del ejemplo de la clase del




straightforward con los mappings fluidos: class= " lineNumbers " >
1 del >

 recibo público de la clase
    {

        recibo público () {}
        /// Identificator///
        identificación virtual pública de la internacional {conseguir; sistema privado; }
         de /// si verdades finished, canto corrigen los datos 
        boleano virtual público acabado {conseguir; sistema; }
        Items de /// de este recibo 
        artículos virtuales públicos de IList {conseguir; sistema; }
    }

    /// Mapping para NHibernate  fluido
    clase pública ProdajaMap: ClassMap
    {
       
        ReceiptMap público ()
        {
            Tabla (“recibo”);
            OptimisticLock.All ();
            DynamicUpdate ();
            Identificación (=> x.Id de x);
            Mapa (=> x.Finished de x);
            HasMany (=> x.Items) .AsBag () .KeyColumn (“Receipt_ID” de x);
        }
    } class= claro " lineNumbers " >
1 del >


clase pública ReceiptItem
    {

        ReceiptItem público () {}

        identificación virtual pública de la internacional {conseguir; sistema privado; }
        Id de /// del recibo 
        internacional virtual pública Receipt_ID {conseguir; sistema; }

        precio más Supplier  de ///
        precio decimal virtual público {conseguir; sistema; }
        descuento más Supplier  de ///
        descuento decimal virtual público {conseguir; sistema; }
    }

    /// Mapping para NHibernate  fluido
    clase pública ReceiptItemMap: ClassMap
    {
        ReceiptItemMap público ()
        {
            Tabla (“ReceiptItems”);
            OptimisticLock.All ();
            DynamicUpdate ();
            Identificación (=> x.Id de x);
            Mapa (=> x.Receipt_ID de x). Columna (“Receipt_ID”);
            Mapa (=> x.Price de x);
            Mapa (=> x.Discount de x);

        }
    ¡} class= >



Thanks de


class= del

Respuesta : Problema del escondrijo de Nhibernate mientras que usa disparadores de MS-SQL

No intentaría combinar ambos disparadores y el uso de una capa de datos tal como nhibernate - usted va siempre a conseguir problemas de sincronización. el nHibernate se piensa para manejar sus datos - y su capa del negocio debe manejar procesos tales como puesta al día de sus precios. Personalmente no voy cerca de los disparadores para ninguna lógica de negocio - para revisar quizás, sino nada. Pienso que obscurecen lógica de negocio y que la hacen nigh en imposible ejecutar otras soluciones del código para manejar los datos - como usted está encontrando.
¿Por qué no trasladarse su código del disparador a un procedimiento almacenado y llamar el procedimiento dentro del alcance de la transacción de la actualización si “acabó” la bandera es verdad? Manejaría esto dentro de la capa del negocio, pero usted podría mover esto a la capa de datos si usted desea.

Tim
Otras soluciones  

 
programming4us programming4us