Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 23957|Svar: 1

[Kilde] Masseindsendelse og transaktionsbehandling i Entity Framework

[Kopier link]
Opslået på 08/04/2017 22.10.01 | | |

Brugen af SaveChanges() i Entity Framework er meget hyppig, og kald af SaveChanges() efter en enkelt ændring eller sletning af data returnerer antallet af impact-poster.

For at bruge batch-modifikation eller batch-sletning af data skal du bruge metoden SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) er blot en notifikation om, at EF skal udføre en operation på databasen, som venter i hukommelsen og kan fortrydes, når det er nødvendigt, såsom at AcceptAllChange()-committing er virkelig succesfuld, og EF vil fortryde operationen SaveChanges(false).



Når man arbejder med distribuerede transaktionsoperationer, er det nødvendigt at bruge TransactionScope til at håndtere det, og mange gange skriver vi sådan her:


Men at skrive sådan er risikabelt, falsk
For eksempel kontekst1. SaveChanges() lykkedes, kontekst2. SaveChanges() er problematisk, vi er inden for scope. Complete() vil afsluttes, når transaktionen er gennemført, og Context1 er blevet udført med succes

(I min praksis kan ovenstående faktisk rulles tilbage normalt, hvis kontekst1. SaveChanges() lykkedes, kontekst2. SaveChanges() er problematisk, ingen af dem vil blive udført med succes!
Henvis til det brugende System.Transaction-navnerum i dit projekt. At definere en TransactionScope i brug svarer til at definere et omfang af ting, dvs. omfanget af denne transaktion er inden for brug. I det brugende scope, hvis der ikke er scope. Complete()-kommandoen, så ruller scopet automatisk alle operationer tilbage, når den ødelægges. )

Dette opfylder måske ikke nødvendigvis vores behov. Hvis vi har brug for, at kontekst1 og kontekst2 udføres succesfuldt samtidig, eller ingen lykkes, skal vi foretage små justeringer i koden, såsom at bruge følgende kode:



Vi bruger SaveChanges(false) til først at sende de nødvendige databaseoperationer til databasen, hvilket betyder, at kontekst1 og kontekst2 ikke rigtig har ændret sig; hvis transaktionen afsluttes og automatisk rulles tilbage, bliver ingen af ændringerne faktisk dedikeret til databasen, så den kan rulles succesfuldt tilbage.




Tidligere:EF6 bruger Database.BeginTransaction til at håndtere transaktioner
Næste:EF ORM Udvikling og Brug Serievejledninger
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com