Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 23237|Svare: 1

[Kilde] Masseinnsending og transaksjonsbehandling i Entity Framework

[Kopier lenke]
Publisert på 08.04.2017 22:10:01 | | |

Bruken av SaveChanges() i Entity Framework er svært hyppig, og å kalle SaveChanges() etter en enkelt endring eller sletting av data returnerer antall påvirkningsposter.

For å bruke batch-modifikasjon eller batch-sletting av data, trenger du metoden SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) er bare en varsling om at EF må utføre en operasjon på databasen, som venter i minnet og kan angres ved behov, for eksempel når AcceptAllChange()-committing er virkelig vellykket, og EF vil angre operasjonen SaveChanges(false).



Når man håndterer distribuerte transaksjonsoperasjoner, er det nødvendig å bruke TransactionScope for å håndtere det, og mange ganger skriver vi slik:


Men å skrive slik er risikabelt, falskt
For eksempel, kontekst1. SaveChanges() lyktes, kontekst2. SaveChanges() er problematisk, vi er innenfor omfang. Complete() vil avsluttes når transaksjonen er gjennomført, og Context1 har blitt utført med suksess

(I min praksis kan det ovennevnte faktisk rulles tilbake normalt, hvis kontekst1. SaveChanges() lyktes, kontekst2. SaveChanges() er problematisk, ingen av dem vil bli utført vellykket!
Referer til det brukende System.Transaction-navnerommet i prosjektet ditt. Å definere en TransactionScope i bruk er ekvivalent med å definere et omfang av ting, det vil si at omfanget av denne transaksjonen er innenfor bruk. I det brukende omfanget, hvis det ikke finnes noe omfang. Fullfør()-kommandoen, så vil omfanget automatisk rulle tilbake alle operasjoner når det ødelegges. )

Dette dekker kanskje ikke nødvendigvis våre behov. Hvis vi trenger at kontekst1 og kontekst2 skal kjøres med suksess samtidig, eller ingen lykkes, må vi gjøre små justeringer i koden, som å bruke følgende kode:



Vi bruker SaveChanges(false) for å sende nødvendige databaseoperasjonskommandoer til databasen først, noe som er for å merke seg at context1 og context2 egentlig ikke har endret seg; hvis transaksjonen avsluttes og rulles automatisk tilbake, blir ingen av endringene faktisk gjort i databasen, så den kan rulles tilbake med suksess.




Foregående:EF6 bruker Database.BeginTransaction for å administrere transaksjoner
Neste:EF ORM-utvikling og bruksserie veiledninger
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com