Pytanie : Nhibernate tajna kryjówka problem podczas gdy używać MS-SQL cyngiel

Hej!

I am using Nhibernate z Potoczysty, MS SQL 2008 ekspresowy baza danych w biznes application.

I mieć klasa wymieniać Kwit che zawierać lista z wiele przedmiot wymieniać ReceiptItems.
The użytkownik móc kwit, Receiptitems ono, i ono dopóki swój oceniony Finished.
This część praca well i ratować the db prawidłowo.
Now dla the problem:

I także mieć cyngiel na the sql stołowy Kwit,/>I podpalać jeżeli the wkładać. Skończony być true.
The cyngiel przynosić nowy cena od the "dostawca stół", i aktualizować the cena dla wszystkie ReceiptItems,
in the ReceiptItems table.

When
session.SaveorUpdate (value)
and then
transaction. Popełniać ()

the latter przyczyna the wyjątek:
StaleObjectStateException
Row aktualizować lub inny transakcja (lub unsaved-cenić być błędny) w ReceiptItems



Removing the cyngiel ofcourse załatwiać the problem, ale i potrzebować ono the cena. Być tam  jakaś sposób dla nhibernate the
error, i odświeżać swój tajna kryjówka po the spustowy ogień?




straightforward klasowy przykład definicja z Potoczysty mappings:

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:
 społeczeństwo klasowy Kwit
    {

        jawny Kwit () {}
        /// Identificator///
        jawny wirtualny int Id {dostawać; intymny set; }
        ///  jeżeli skończony prawdziwy, cant redagować data///
        jawny wirtualny Boolowski Kończyć {dostawać; set; }
        /// Items ten Receipt///
        jawny wirtualny IList Rzecz {dostawać; set; }
    }

    /// Mapping dla NHibernate  
    społeczeństwo klasowy ProdajaMap: ClassMap
    {
       
        jawny ReceiptMap ()
        {
            Stół ("Kwit");
            OptimisticLock.All ();
            DynamicUpdate ();
            Id (x => x.Id);
            Mapa (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:
społeczeństwo klasowy ReceiptItem
    {

        jawny ReceiptItem () {}

        jawny wirtualny int Id {dostawać; intymny set; }
        /// Id the Receipt///
        jawny wirtualny int Receipt_ID {dostawać; set; }

        /// Supplier price///
        jawny wirtualny dziesiątkowy Cena {dostawać; set; }
        /// Supplier discount///
        jawny wirtualny decimal Rabat {dostawać; set; }
    }

    /// Mapping dla NHibernate  
    społeczeństwo klasowy ReceiptItemMap: ClassMap
    {
        jawny ReceiptItemMap ()
        {
            Stół ("ReceiptItems");
            OptimisticLock.All ();
            DynamicUpdate ();
            Id (x => x.Id);
            Mapa (x => x.Receipt_ID). Kolumna ("Receipt_ID");
            Mapa (x => x.Price);
            Mapa (x => x.Discount);

        }
    } 



Thanks!


Odpowiedź : Nhibernate tajna kryjówka problem podczas gdy używać MS-SQL cyngiel

I próbować oba cyngiel i the use dane warstwa tak jak nhibernate - ty zawsze iść synchronisation problem. nHibernate zamierzać twój dane - i twój biznesowy warstwa musieć proces tak jak twój cena. Osobiście I iść blisko cyngiel dla jakaś biznesowy logika - dla być może, ale kontrolować inny. I myśleć zaciemniać biznesowy logika i robić ono biznesowy na niemożliwy inny kod rozwiązanie dla the dane - gdy ty znajdować.
Dlaczego nie ruszać się twój spustowy kod w zaopatrzony procedura i dzwonić the procedura z wewnątrz the transakcja zakres the aktualizacja jeżeli the "kończyć" flaga być prawdziwy? I kierować ty wśród the biznesowy warstwa, ale ty móc móc the dane warstwa jeżeli ty życzyć.

Tim
Inne rozwiązania  
 
programming4us programming4us