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