Question : Problème de cachette de Nhibernate tout en employant des déclenchements de MS-SQL

Hé ! le

I AM using Nhibernate avec fluent, pour persister une base de données exprès de la milliseconde SQL 2008 dans des affaires application.

I ont une classe appelée Receipt qui contient une liste avec beaucoup d'objets appelés ReceiptItems. l'utilisateur du
The peut créer un reçu, ajouter Receiptitems à lui, et l'éditer tant que sa pièce non marquée de Finished.
This fonctionne bien et économise au DB correctement.
Now pour le problème : le

I ont également un déclenchement à la réception de table de SQL, celle les feux s'inséré. De finition est prix d'efforts de déclenchement de true.
The les nouveaux de la « table de fournisseur », et met à jour les prix de tout le ReceiptItems, le
in le ReceiptItems table.

When appelle le then
transaction du
and du
session.SaveorUpdate (value). Commettre () les causes de ce dernier du

the l'exception : le
StaleObjectStateException
Row était mis à jour ou supprimé par une autre transaction (ou la cartographie d'unsaved-valeur était incorrect) dans ReceiptItems



Removing l'ofcourse de déclenchement fixe le problème, mais j'ai besoin de lui pour mettre à jour les prix. Est-ce qu'il y a régénère une manière pour que le nhibernate ignore-t-il le
error, et sa cachette après les feux de déclenchement ? définitions d'exemple de classe du




straightforward avec les tracés fluents : class= " lineNumbers " >
1 de >

 reçu public de classe
    {

        reçu public () {}
        /// Identificator///
        identification virtuelle publique d'international {obtenir ; ensemble privé ; }
         de /// si vrais de finition, pente éditent les données 
        booléen virtuel public fini {obtenir ; ensemble ; }
        Items de /// de ce reçu 
        articles virtuels publics d'IList {obtenir ; ensemble ; }
    }

    /// Mapping pour NHibernate  fluent
    classe publique ProdajaMap : ClassMap
    {
       
        ReceiptMap public ()
        {
            Tableau (« reçu ») ;
            OptimisticLock.All () ;
            DynamicUpdate () ;
            Identification (=> x.Id de x) ;
            Carte (=> x.Finished de x) ;
            HasMany (=> de x x.Items) .AsBag () .KeyColumn (« Receipt_ID ») ;
        }
    } class= " de 
1 de >


classe publique ReceiptItem
    {

        ReceiptItem public () {}

        identification virtuelle publique d'international {obtenir ; ensemble privé ; }
        Id de /// du reçu 
        international virtuel public Receipt_ID {obtenir ; ensemble ; }

        prix Supplier  de ///
        prix décimal virtuel public {obtenir ; ensemble ; }
        escompte Supplier  de ///
        escompte décimal virtuel public {obtenir ; ensemble ; }
    }

    /// Mapping pour NHibernate  fluent
    classe publique ReceiptItemMap : ClassMap
    {
        ReceiptItemMap public ()
        {
            Tableau (« ReceiptItems ») ;
            OptimisticLock.All () ;
            DynamicUpdate () ;
            Identification (=> x.Id de x) ;
            Carte (=> x.Receipt_ID de x). Colonne (« Receipt_ID ») ;
            Carte (=> x.Price de x) ;
            Carte (=> x.Discount de x) ;

        }
    } class= >



Thanks de


class= de

Réponse : Problème de cachette de Nhibernate tout en employant des déclenchements de MS-SQL

Je n'essayerais pas de combiner les deux déclenchements et l'utilisation d'une couche données telle que le nhibernate - vous allez toujours obtenir des problèmes de synchronisation. le nHibernate est prévu pour contrôler vos données - et votre couche d'affaires devrait contrôler des processus tels que mettre à jour vos prix. Personnellement je ne vais pas près des déclenchements pour aucune logique d'affaires - pour auditer peut-être, mais près de rien d'autre. Je pense qu'ils obscurcissent la logique d'affaires et la rendent proche sur impossible de mettre en application d'autres solutions de code pour contrôler les données - comme vous trouvez.
Pourquoi pas entrer votre code de déclenchement dans un procédé stocké et appeler le procédé de la portée de transaction de la mise à jour si « finissait » le drapeau est vrai ? Je contrôlerais ceci dans la couche d'affaires, mais vous pourriez déplacer ceci à la couche données si vous souhaitez.

Tim
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us