Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 23237|Antwoord: 1

[Bron] Bulkindiening en transactieverwerking in Entity Framework

[Link kopiëren]
Geplaatst op 08-04-2017 22:10:01 | | |

Het gebruik van SaveChanges() in Entity Framework is zeer frequent, en het aanroepen van SaveChanges() na een enkele wijziging of verwijdering van data geeft het aantal impactrecords terug.

Om batchwijziging of batchverwijdering van data te gebruiken, heb je de methode SaveChanges(false)+AcceptAllChanges() nodig.



SaveChanges(false) is gewoon een melding dat EF een operatie op de database moet uitvoeren, die in het geheugen in behandeling is en indien nodig kan worden ongedaan gemaakt, bijvoorbeeld wanneer AcceptAllChange() committen echt succesvol is, en EF de bewerking van SaveChanges(false) ongedaan maakt.



Bij het omgaan met gedistribueerde transactieoperaties is het noodzakelijk om TransactionScope te gebruiken om dit af te handelen, en vaak schrijven we als volgt:


Maar schrijven als dit is riskant, vals
Bijvoorbeeld, context1. SaveChanges() is geslaagd, context2. SaveChanges() is problematisch, we zijn binnen de scope. Complete() wordt beëindigd wanneer de transactie is gecommitteerd en Context1 succesvol is uitgevoerd

(In mijn praktijk kan het bovenstaande eigenlijk normaal worden teruggedraaid, als context1. SaveChanges() is geslaagd, context2. SaveChanges() is problematisch, geen van beide zal succesvol worden uitgevoerd!
Raadpleeg de naamruimte die System.Transaction gebruikt in je project. Het definiëren van een TransactionScope in het gebruik is gelijkwaardig aan het definiëren van een scope of things, oftewel de scope van deze transactie ligt binnen het gebruik. In de gebruiksscope, als er geen scope is. Complete()-commando, dan rolt het scope automatisch alle bewerkingen terug wanneer ze vernietigd zijn. )

Dit hoeft niet per se aan onze behoeften te voldoen. Als we context1 en context2 gelijktijdig succesvol moeten uitvoeren, of geen van beide slaagt, moeten we kleine aanpassingen aan de code doen, zoals het gebruik van de volgende code:



We gebruiken SaveChanges(false) om eerst de benodigde databasebewerkingscommando's naar de database te sturen, namelijk dat context1 en context2 eigenlijk niet echt zijn veranderd; als de transactie wordt beëindigd en automatisch teruggerold, wordt geen van beide wijzigingen daadwerkelijk in de database gecommitteerd en kan deze succesvol worden teruggerold.




Vorig:EF6 gebruikt Database.BeginTransaction om transacties te beheren
Volgend:EF ORM Ontwikkeling en Gebruik Reeks Tutorials
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com