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