Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 23237|Odpoveď: 1

[Zdroj] Hromadné odosielanie a spracovanie transakcií v rámci entity

[Kopírovať odkaz]
Zverejnené 8. 4. 2017 22:10:01 | | |

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äť.




Predchádzajúci:EF6 používa Database.BeginTransaction na správu transakcií
Budúci:Návody na vývoj a použitie série EF ORM
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com