Použitie SaveChanges() v Entity Framework je veľmi časté a volanie SaveChanges() po jednej úprave alebo vymazaní dát vráti počet záznamov o dopadoch.
Na použitie dávkovej úpravy alebo dávkového mazania dát potrebujete metódu SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) je len oznámenie, že EF potrebuje vykonať operáciu na databáze, ktorá je v pamäti a dá sa zrušiť, keď je to potrebné, napríklad keď je commitovanie AcceptAllChange() skutočne úspešné a EF zruší operáciu SaveChanges(false).
Pri riešení distribuovaných transakčných operácií je potrebné použiť TransactionScope na ich spracovanie a často píšeme takto:
Ale písať takto je riskantné, nepravdivé Napríklad kontext1. SaveChanges() uspel, context2. SaveChanges() je problematický, sme v rozsahu. Complete() sa ukončí, keď je transakcia potvrdená a Context1 bol úspešne vykonaný
(V mojej praxi sa vyššie uvedené dá normálne vrátiť späť, ak je kontext1. SaveChanges() uspel, context2. SaveChanges() je problematický, ani jedno sa nespustí úspešne! Odkazujte na menný priestor using System.Transaction vo vašom projekte. Definovanie TransactionScope v používaní je ekvivalentné definovaniu rozsahu vecí, t. j. rozsah tejto transakcie je v rámci používania. Pri používaní ďalekohľadu, ak neexistuje. Príkaz dokončiť (dokončiť), potom zameriavač automaticky vráti všetky operácie späť po zničení. ) To nemusí nevyhnutne spĺňať naše potreby. Ak potrebujeme, aby kontext1 a kontext2 boli úspešne vykonané súčasne, alebo ani jeden neuspeje, musíme urobiť malé úpravy kódu, napríklad použitím nasledujúceho kódu:
Používame SaveChanges(false) na odoslanie potrebných príkazov na operácie databázy ako prvého, čo znamená, že kontext1 a context2 sa v skutočnosti nezmenili, ak je transakcia ukončená a automaticky vrátená späť, žiadna z týchto zmien sa v databáze skutočne nezaviaže, takže ju možno úspešne vrátiť späť.
|