Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 23957|Απάντηση: 1

[Πηγή] Μαζική υποβολή και επεξεργασία συναλλαγών στο Entity Framework

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 8/4/2017 10:10:01 μ.μ. | | |

Η χρήση της 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 δεν έχουν αλλάξει πραγματικά, εάν η συναλλαγή τερματιστεί και επανέλθει αυτόματα, καμία αλλαγή δεν δεσμεύεται πραγματικά στη βάση δεδομένων, ώστε να μπορεί να επανέλθει με επιτυχία.




Προηγούμενος:Το EF6 χρησιμοποιεί το Database.BeginTransaction για τη διαχείριση συναλλαγών
Επόμενος:Προγράμματα εκμάθησης της σειράς ανάπτυξης και χρήσης EF ORM
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com