Uporaba SaveChanges() v Entity Framework je zelo pogosta, klic SaveChanges() po eni sami spremembi ali izbrisu podatkov pa vrne število zapisov o vplivu.
Za uporabo serijskega spreminjanja ali brisanja podatkov potrebujete metodo SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) je zgolj obvestilo, da mora EF izvesti operacijo na bazi podatkov, ki je v čakanju v pomnilniku in jo je mogoče razveljaviti, ko je potrebno, na primer če je AcceptAllChange() resnično uspešna in EF razveljavi operacijo SaveChanges(false).
Pri obravnavi porazdeljenih transakcijskih operacij je potrebno uporabiti TransactionScope za njihovo obdelavo, in pogosto zapišemo takole:
A pisanje na tak način je tvegano, lažno Na primer, kontekst1. SaveChanges() je uspel, context2. SaveChanges() je problematičen, smo v obsegu. Complete() se zaključi, ko je transakcija potrjena in je Context1 uspešno izveden
(V moji praksi se zgoraj navedeno dejansko lahko normalno vrne, če je kontekst1. SaveChanges() je uspel, context2. SaveChanges() je problematičen, nobena ne bo uspešno izvedena! V svojem projektu se sklicujte na imenski prostor using System.Transaction. Opredelitev TransactionScope v uporabi je enakovredna opredelitvi obsega stvari, tj. obseg te transakcije je znotraj uporabe. V uporabi daljnogleda, če ni teleskopa. Ukaz Complete(), nato bo scope samodejno povrnil vse operacije, ko jih uniči. ) To morda ne bo nujno ustrezalo našim potrebam. Če potrebujemo, da se kontekst1 in kontekst2 uspešno izvajata hkrati, ali če nobeden ne uspe, moramo narediti majhne prilagoditve kode, na primer z uporabo naslednje kode:
Uporabljamo SaveChanges(false), da najprej pošljemo potrebne ukaze za operacije baze podatkov, kar pomeni, da kontekst1 in kontekst2 v resnici nista spremenila; če je transakcija prekinjena in samodejno vrnjena nazaj, nobena sprememba ni dejansko potrjena v bazo, zato jo je mogoče uspešno povrniti.
|