Θέλουμε διαφορετικά βήματα πρόσβασης στη βάση να συμμετέχουν στην ίδια συναλλαγή.

Το TransactionScope ορίζει ένα κοινό περιβάλλον συναλλαγής γύρω από τον κώδικα. Συμβατές βιβλιοθήκες πρόσβασης στη βάση μπορούν να συμμετέχουν σε αυτό.

Παράδειγμα

Στον κώδικα:

  • options είναι οι ρυθμίσεις του ShopDbContext.
  • Required χρησιμοποιεί υπάρχουσα κοινή συναλλαγή ή δημιουργεί μία.
  • ReadCommitted επιτρέπει ανάγνωση οριστικοποιημένων αλλαγών άλλων συναλλαγών.
  • Enabled επιτρέπει στην κοινή συναλλαγή να ακολουθεί την εκτέλεση μετά από await.
using System.Transactions; using (var scope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }, TransactionScopeAsyncFlowOption.Enabled)) { await using var db = new ShopDbContext(options); db.Orders.Add(order); await db.SaveChangesAsync(); db.AuditEntries.Add(new AuditEntry { Message = "Δημιουργήθηκε παραγγελία" }); await db.SaveChangesAsync(); scope.Complete(); } 

Αν αποτύχει η δεύτερη αποθήκευση, δεν φτάνουμε στο Complete() και η κοινή συναλλαγή ακυρώνεται.

Τι κάνει το Complete

Δηλώνει ότι το συγκεκριμένο τμήμα εργασίας ολοκληρώθηκε επιτυχώς.

Δεν σημαίνει ότι έγινε ήδη το τελικό commit.

Αν το scope δημιούργησε τη συναλλαγή, η διαδικασία οριστικοποίησης γίνεται στην έξοδο από το using. Αν συμμετέχει σε εξωτερική συναλλαγή, το τελικό commit εξαρτάται από εκείνον που την ελέγχει.

Το Complete() μπαίνει τελευταίο. Τεκμηρίωση Microsoft

Πότε το επιλέγουμε

Είναι χρήσιμο όταν διαφορετικά συμβατά τμήματα πρόσβασης σε δεδομένα χρειάζονται κοινή συναλλαγή.

Για μια απλή ροή με ένα DbContext, η BeginTransactionAsync() συνήθως κάνει τον έλεγχο πιο εμφανή.

Χρειάζεται επίσης προσοχή:

  • Χωρίς ρητή επιλογή απομόνωσης, μια νέα συναλλαγή του scope χρησιμοποιεί Serializable.
  • Η υποστήριξη εξαρτάται από τη βιβλιοθήκη σύνδεσης με τη βάση.
  • Πολλές συνδέσεις ή βάσεις μπορεί να απαιτήσουν πρόσθετο συντονισμό.
  • Η ολοκλήρωση του scope δεν παρέχει ασύγχρονο commit/rollback.

Τεκμηρίωση Microsoft για υποστήριξη και περιορισμούς