allmänhet klassificerar ReceiptItem { offentliga ReceiptItem () {} offentligt faktiskt int-ID {få; privat uppsättning; } /// Id av kvittot offentlig faktisk int Receipt_ID {få; uppsättning; } /// mer Supplier pris offentligt faktiskt decimal- prissätter {få; uppsättning; } /// mer Supplier discount/// offentlig faktisk decimal- rabatt {få; uppsättning; } } /// som Mapping för NHibernate Fluent/// allmänhet klassificerar ReceiptItemMap: ClassMap { offentliga ReceiptItemMap () { Bordlägga (”ReceiptItems”); OptimisticLock.All (); DynamicUpdate (); ID (x-=> x.Id); Kartlägga (x-=> x.Receipt_ID). Kolonn (”Receipt_ID”); Kartlägga (x-=> x.Price); Kartlägga (x-=> x.Discount); } } <-/pre>

Fråga : Stunden för Nhibernate cacheproblem using MS-SQL startar

Hey! förmiddagen för

I using Nhibernate med flytande, att framhärda en uttrycklig databas för ms SQL 2008 i en affär application.

I har en klassificera som namnges för att kvittera som innehåller en lista med många anmärker namngav ReceiptItems. användaren för
The kan skapa en kvittera, tillfoga Receiptitems till den och redigera den, så länge som dess inte markerade del för Finished.
This fungerar väl och sparar till dben korrekt.
Now för problemet:

I har också en starta på sqlen att bordlägga kvitterar, det avfyrar om insatt. Färdig är true.
The startar nya fetches prissätter från ”leverantören bordlägger”, och uppdateringar prissätter för all ReceiptItems,
in ReceiptItemsen table.

When som kallar then
transaction för
and för
session.SaveorUpdate (value). Begå () sistnämnden för

the orsakar undantaget:
StaleObjectStateException
Row uppdaterades, eller borttaget av en annan transaktion (eller osparad-värdera att kartlägga var oriktigt), i ReceiptItems



Removing startaofcoursen fixar problemet, men jag behöver det att uppdatera prissätter. Finns det any långt för att nhibernate ska ignorera error och förnyar dess cache, efter starta har avfyrat?




straightforward klassificerar exempeldefinitioner med flytande mappings: för class=" codeSnippet " för

1 för >

 allmänhet klassificerar kvitterar
    {

        allmänhet kvitterar () {}
        /// Identificator///
        offentligt faktiskt int-ID {få; privat uppsättning; }
        /// , om färdiga riktiga, cant redigerar data 
        offentligt färdigt faktiskt Boolean {få; uppsättning; }
        /// Items av detta kvitto 
        offentliga faktiska IList objekt {få; uppsättning; }
    }

    /// som Mapping för NHibernate Fluent///
    allmänhet klassificerar ProdajaMap: ClassMap
    {
       
        offentliga ReceiptMap ()
        {
            Bordlägga (”kvittera”);
            OptimisticLock.All ();
            DynamicUpdate ();
            ID (x-=> x.Id);
            Kartlägga (x-=> x.Finished);
            HasMany (x-=> x.Items) .AsBag () .KeyColumn (”Receipt_ID”);
        }
    } class= " lineNumbers " >
1 för >





Thanks!


" klar "

Svar : Stunden för Nhibernate cacheproblem using MS-SQL startar

Jag skulle inte försök till sammanslutningen både startar och bruket av ett datalagrar liksom nhibernate - du går alltid att få synkroniseringsproblem. nHibernate ämnas för att klara av dina data - och ditt affärslagrar bör klara av bearbetar liksom att uppdatera som är ditt, prissätter. Personligen jag går inte nära startar för någon affärslogik - för att revidera kanske, utan ingenting annars. Funderare I de oklar affärslogik och gör den nigh på omöjligt att genomföra annat kodifierar lösningar för att klara av datan - som du finner.
Why inte den din flyttningen startar kodifierar in i ett lagrat tillvägagångssätt, och appellen tillvägagångssättet transaktionsräckvidden av uppdateringen, om ”avslutade sig” sjunker inifrån som, är riktig? Jag skulle rätta detta inom affärslagrar, men du kunde flyttningen detta till datalagrar, om du önskar.

Tim
Andra lösningar  
 
programming4us programming4us