Vraag : Het geheime voorgeheugenprobleem van Nhibernate terwijl het gebruiken van trekkers lidstaten-SQL

Hey!

I am gebruikend Nhibernate met Vloeiend, om voort te duren een uitdrukkelijk gegevensbestand van lidstaten SQL 2008 in zaken application.

I heeft een klasse genoemd Ontvangstbewijs dat een lijst met vele voorwerpen genoemd ReceiptItems bevat. de gebruiker
The kan een ontvangstbewijs tot stand brengen, Receiptitems toevoegen aan het, en het uitgeven zolang zijn niet duidelijk deel Finished.
This goed werkt en correct aan db spaart.
Now voor het probleem:

I heeft ook een trekker bij het sql lijstOntvangstbewijs, dat als opgenomen in brand steekt. Gebeëindigd true.
The wordt de nieuwe prijzen van trekkerhalen van de „leverancierslijst“, en bijwerkt de prijzen voor al ReceiptItems,
in ReceiptItems table.

When roepend
session.SaveorUpdate (value)
and then
transaction. Bega () laatstgenoemde oorzaken

the de uitzondering:
StaleObjectStateException
Row werd bijgewerkt of werd geschrapt door een andere transactie (of de unsaved-waardeafbeelding was onjuist) in ReceiptItems



Removing de trekker ofcourse het probleem bevestigt, maar ik heb het nodig om de prijzen bij te werken. Is er om het even welke manier voor nhibernate om
error, zijn geheim voorgeheugen na de trekkerbranden te verfrissen te negeren en?




straightforward- klassenvoorbeeld met Vloeiende afbeeldingen:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
 openbaar klassenOntvangstbewijs
    {

        openbaar Ontvangstbewijs () {}
        /// Identificator///
        openbare virtuele int.Identiteitskaart {krijg; privé reeks; }
        ///  indien gebeëindigde waar, afschuint geeft gegevens  uit
        openbare virtuele Gebeëindigd Van Boole {krijg; reeks; }
        /// Items van dit Ontvangstbewijs 
        openbare virtuele Punten IList {krijg; reeks; }
    }

    /// het Mapping voor NHibernate Vloeiende 
    openbare klasse ProdajaMap: ClassMap
    {
       
        openbare ReceiptMap ()
        {
            Lijst („Ontvangstbewijs“);
            OptimisticLock.All ();
            DynamicUpdate ();
            Identiteitskaart (x => x.Id);
            Kaart (x => x.Finished);
            HasMany (x => x.Items) .AsBag () .KeyColumn („Receipt_ID“);
        }
    } 


1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
openbare klasse ReceiptItem
    {

        openbare ReceiptItem () {}

        openbare virtuele int.Identiteitskaart {krijg; privé reeks; }
        /// Id van het Ontvangstbewijs 
        openbaar virtueel int. Receipt_ID {krijg; reeks; }

        /// meer Supplier prijs 
        openbare virtuele decimale Prijs {krijg; reeks; }
        /// meer Supplier korting 
        openbare virtuele decimale Korting {krijg; reeks; }
    }

    /// het Mapping voor NHibernate Vloeiende 
    openbare klasse ReceiptItemMap: ClassMap
    {
        openbare ReceiptItemMap ()
        {
            Lijst („ReceiptItems“);
            OptimisticLock.All ();
            DynamicUpdate ();
            Identiteitskaart (x => x.Id);
            Kaart (x => x.Receipt_ID). Kolom („Receipt_ID“);
            Kaart (x => x.Price);
            Kaart (x => x.Discount);

        }
    } 



Thanks!


Antwoord : Het geheime voorgeheugenprobleem van Nhibernate terwijl het gebruiken van trekkers lidstaten-SQL

Ik zou niet proberen om zowel trekkers als het gebruik van een gegevenslaag zoals nhibernate te combineren - u gaat altijd synchronisatieproblemen krijgen. nHibernate is bedoeld om uw gegevens te beheren - en uw bedrijfslaag zou processen moeten beheren zoals het bijwerken van uw prijzen. Persoonlijk ga ik niet dichtbij trekkers voor enige bedrijfslogica - voor controle misschien, maar niets anders. Ik denk zij bedrijfslogica verduisteren en het nigh op onmogelijk maken om andere codeoplossingen uit te voeren voor het beheren van de gegevens - zoals u vindt.
Waarom uw trekkercode in een opgeslagen procedure de procedure van binnen het transactiewerkingsgebied van de roepen niet bewegen en update als de „gebeëindigde“ vlag waar is? Ik zou dit binnen de bedrijfslaag leiden, maar u kon dit naar de gegevenslaag verplaatsen als u dit wenst.

Tim
Andere oplossingen  
 
programming4us programming4us