Η χρήση της SaveChanges() στο Entity Framework είναι πολύ συχνή και η κλήση της SaveChanges() μετά από μία μόνο τροποποίηση ή διαγραφή δεδομένων επιστρέφει τον αριθμό των καρτελών επιπτώσεων.
Για να χρησιμοποιήσετε την τροποποίηση παρτίδας ή τη μαζική διαγραφή δεδομένων, χρειάζεστε τη μέθοδο SaveChanges(false)+AcceptAllChanges().
Το SaveChanges(false) είναι απλώς μια ειδοποίηση ότι το EF πρέπει να εκτελέσει μια λειτουργία στη βάση δεδομένων, η οποία εκκρεμεί στη μνήμη και μπορεί να αναιρεθεί όταν είναι απαραίτητο, όπως η δέσμευση AcceptAllChange() είναι πραγματικά επιτυχής και το EF θα αναιρέσει τη λειτουργία του SaveChanges(false).
Όταν ασχολείστε με κατανεμημένες συναλλαγές, είναι απαραίτητο να χρησιμοποιήσετε το TransactionScope για να το χειριστείτε και πολλές φορές θα γράψουμε ως εξής:
Αλλά το να γράφεις έτσι είναι ριψοκίνδυνο, ψευδές Για παράδειγμα, το πλαίσιο1. SaveChanges() πέτυχε, context2. Η SaveChanges() είναι προβληματική, είμαστε στο πεδίο εφαρμογής. Η συνάρτηση Complete() θα τερματιστεί όταν ολοκληρωθεί η συναλλαγή και το Context1 έχει εκτελεστεί με επιτυχία
(Στην πρακτική μου, τα παραπάνω μπορούν πραγματικά να ανακληθούν κανονικά, εάν το πλαίσιο1. SaveChanges() πέτυχε, context2. Το SaveChanges() είναι προβληματικό, κανένα από τα δύο δεν θα εκτελεστεί με επιτυχία! Ανατρέξτε στον χώρο ονομάτων System.Transaction στο έργο σας. Ο ορισμός ενός TransactionScope στη χρήση είναι ισοδύναμος με τον ορισμό ενός εύρους πραγμάτων, δηλαδή, το εύρος αυτής της συναλλαγής είναι εντός χρήσης. Στο πεδίο χρήσης, εάν δεν υπάρχει πεδίο εφαρμογής. Complete(), τότε το πεδίο εφαρμογής θα επαναφέρει αυτόματα όλες τις λειτουργίες όταν καταστραφεί. ) Αυτό μπορεί να μην ανταποκρίνεται απαραίτητα στις ανάγκες μας. Εάν χρειαζόμαστε το context1 και το context2 να εκτελεστούν με επιτυχία ταυτόχρονα ή κανένα από τα δύο δεν πετύχει, πρέπει να κάνουμε μικρές προσαρμογές στον κώδικα, όπως να χρησιμοποιήσουμε τον ακόλουθο κώδικα:
Χρησιμοποιούμε το SaveChanges(false) για να στείλουμε πρώτα τις απαραίτητες εντολές λειτουργίας της βάσης δεδομένων στη βάση δεδομένων, δηλαδή να σημειώσουμε ότι το context1 και το context2 δεν έχουν αλλάξει πραγματικά, εάν η συναλλαγή τερματιστεί και επανέλθει αυτόματα, καμία αλλαγή δεν δεσμεύεται πραγματικά στη βάση δεδομένων, ώστε να μπορεί να επανέλθει με επιτυχία.
|