Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 23237|Antwort: 1

[Quelle] Masseneinreichung und Transaktionsverarbeitung im Entity Framework

[Link kopieren]
Veröffentlicht am 08.04.2017 22:10:01 | | |

Die Verwendung von SaveChanges() im Entity Framework ist sehr häufig, und das Aufrufen von SaveChanges() nach einer einzigen Änderung oder Löschung von Daten gibt die Anzahl der Impact-Datensätze zurück.

Um Batch-Modifikation oder Batch-Löschung von Daten zu verwenden, benötigt man die Methode SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) ist einfach eine Benachrichtigung, dass EF eine Operation an der Datenbank ausführen muss, die im Speicher aussteht und bei Bedarf rückgängig gemacht werden kann, zum Beispiel ist das Committing von AcceptAllChange() wirklich erfolgreich und EF rückgängig macht die Aktion von SaveChanges(false) rückgängig.



Bei verteilten Transaktionsoperationen ist es notwendig, TransactionScope zu verwenden, um sie zu handhaben, und oft schreiben wir so:


Aber so zu schreiben ist riskant, falsch
Zum Beispiel: Kontext1. SaveChanges() war erfolgreich, context2. SaveChanges() ist problematisch, wir sind im Scope. Complete() endet, wenn die Transaktion committet ist und Context1 erfolgreich ausgeführt wurde

(In meiner Praxis kann das oben Beschriebene tatsächlich normal zurückgesetzt werden, wenn Kontext 1 ist. SaveChanges() war erfolgreich, context2. SaveChanges() ist problematisch, keines von beiden wird erfolgreich ausgeführt!
Beziehen Sie sich auf den System.Transaction-Namensraum in Ihrem Projekt. Die Definition eines Transaktionsumfangs in der Nutzung entspricht der Definition eines Umfangs von Dingen, d. h. der Umfang dieser Transaktion liegt innerhalb von Nutzungsbereich. Im Nutzungsumfang, wenn es keinen Umfang gibt. Complete()-Befehl, dann rollt der Umfang automatisch alle Operationen zurück, wenn sie zerstört werden. )

Das entspricht nicht unbedingt unseren Bedürfnissen. Wenn wir möchten, dass Kontext1 und Kontext2 gleichzeitig erfolgreich ausgeführt werden oder keiner gelingt, müssen wir kleine Anpassungen am Code vornehmen, wie zum Beispiel den folgenden Code:



Wir verwenden SaveChanges(false), um zuerst die notwendigen Datenbankoperationsbefehle an die Datenbank zu senden, was bedeutet, dass sich Kontext1 und Kontext2 eigentlich nicht geändert haben; wenn die Transaktion beendet und automatisch zurückgesetzt wird, wird keine der Änderungen tatsächlich in die Datenbank festgelegt, sodass sie erfolgreich zurückgerollt werden kann.




Vorhergehend:EF6 verwendet Database.BeginTransaction, um Transaktionen zu verwalten.
Nächster:EF ORM-Entwicklungs- und Nutzserien-Tutorials
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com