SaveChanges() naudojimas objektų sistemoje yra labai dažnas, o iškvietus SaveChanges() po vieno duomenų modifikavimo ar panaikinimo pateikiamas poveikio įrašų skaičius.
Norint naudoti paketinį modifikavimą arba paketinį duomenų naikinimą, reikia metodo SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) yra tik pranešimas, kad EF turi atlikti operaciją duomenų bazėje, kuri laukia atmintyje ir gali būti anuliuota, jei reikia, pvz., AcceptAllChange() įsipareigojimas tikrai sėkmingas, o EF anuliuos SaveChanges(false) operaciją.
Atliekant paskirstytas operacijų operacijas, būtina naudoti "TransactionScope", ir daug kartų rašysime taip:
Bet rašyti taip yra rizikinga, klaidinga Pavyzdžiui, kontekstas1. SaveChanges() pavyko, kontekstas2. SaveChanges() yra problematiškas, mes esame aprėptyje. Complete() bus nutrauktas, kai operacija bus įvykdyta, o Context1 bus sėkmingai įvykdytas
(Mano praktikoje, pirmiau minėtas iš tikrųjų gali būti atšauktas normaliai, jei kontekstas1. SaveChanges() pavyko, kontekstas2. SaveChanges() yra problematiška, nei bus sėkmingai vykdoma! Nurodykite savo projekto vardų sritį naudojant System.Transaction. TransactionScope apibrėžimas naudojant yra tolygus dalykų apimties apibrėžimui, t. y. šio sandorio apimtis yra naudojimo. Taikymo srityje, jei taikymo srities nėra. Complete() komanda, tada aprėptis automatiškai atšauks visas operacijas, kai bus sunaikinta. ) Tai nebūtinai atitinka mūsų poreikius. Jei mums reikia, kad context1 ir context2 būtų sėkmingai vykdomi vienu metu, arba nė vienas iš jų nepavyksta, turime atlikti nedidelius kodo pakeitimus, pvz., naudoti šį kodą:
Mes naudojame SaveChanges(false), kad pirmiausia į duomenų bazę siųstume reikiamas duomenų bazės operacijų komandas, o tai reiškia, kad context1 ir context2 iš tikrųjų nepasikeitė, jei operacija nutraukiama ir automatiškai atšaukiama, nė vienas pakeitimas iš tikrųjų nėra įtrauktas į duomenų bazę, todėl jį galima sėkmingai atšaukti.
|