Χρησιμοποιώντας το EF για να χειριστείτε τη βάση δεδομένων, να εξαγάγετε το DbContext (κλάση περιβάλλοντος λειτουργίας βάσης δεδομένων) στο ίδιο αίτημα HTTP για να διασφαλίσετε τη μοναδικότητα, το άρθρο χρησιμοποιεί δύο σχήματα για να διασφαλίσει τη μοναδικότητα του περιβάλλοντος Entity Framework και επισυνάπτεται η λύση στην πλατφόρμα .NET Core.
Επιλογή 1
Εάν ένα αντικείμενο είναι εγγυημένο ότι είναι παγκοσμίως μοναδικό, σίγουρα θα σκεφτείτε ένα κλασικό μοτίβο σχεδίασης: λειτουργία singleton, εάν το αντικείμενο που θα χρησιμοποιηθεί πρέπει να είναι μοναδικό στο νήμα;
Υποδοχή δεδομένων: CallContext, εντάξει δείτε την εξήγηση του msdn για το περιεχόμενο κλήσης.
Το CallContext είναι ένα αποκλειστικό αντικείμενο συλλογής παρόμοιο με έναν τοπικό χώρο αποθήκευσης νημάτων για κλήσεις μεθόδων και παρέχει μια υποδοχή δεδομένων που είναι μοναδική για κάθε νήμα λογικής εκτέλεσης. Οι υποδοχές δεδομένων δεν μοιράζονται μεταξύ των περιβαλλόντων κλήσης σε άλλα λογικά νήματα. Τα αντικείμενα μπορούν να προστεθούν στο CallContext όταν διαδίδεται εμπρός και πίσω κατά μήκος της διαδρομής του κώδικα εκτέλεσης και ελέγχεται από μεμονωμένα αντικείμενα σε αυτήν τη διαδρομή.
Δηλαδή, το τρέχον νήμα αποθηκεύει το αντικείμενο στον τοπικό χώρο αποθήκευσης του νήματος και το αντικείμενο καταστρέφεται καθώς το νήμα καταστρέφεται.
Χρήση κωδικού:
Σενάρια χρήσης: Προσωπικά πιστεύω ότι χρησιμοποιείται όταν το αντικείμενο πρέπει να χρησιμοποιηθεί καθολικά μέσα στο νήμα και τα άλλα νήματα επέκτασης πακέτου νημάτων δεν μπορούν να έχουν πρόσβαση σε αυτό. Για παράδειγμα, στο περιβάλλον δεδομένων του EF, θα δημιουργηθεί ένα νήμα για κάθε αίτημα και αυτή τη στιγμή, θα δημιουργηθεί ένα αντικείμενο περιβάλλοντος δεδομένων για χρήση από διαφορετικές συναρτήσεις και, τέλος, θα δεσμευτεί μαζί για την αποφυγή προβλημάτων συναλλαγής. Φυσικά, μερικοί άνθρωποι μπορεί να με ρωτήσουν αν μπορώ να δημιουργήσω μια μεταβλητή για χρήση, η οποία μπορεί επίσης να επιτύχει τον ίδιο σκοπό, φυσικά, αλλά αυτό το αντικείμενο μπορεί επίσης να αλληλεπιδράσει με άλλα δεδομένα νήματος, κάτι που έρχεται σε αντίθεση με την έννοια του μοναδικού στο νήμα.
Επιλογή 2
Το σενάριο βασίζεται σε αιτήματα http web, επειδή κάθε αίτημα είναι ένα νέο νήμα και ο κώδικας έχει ως εξής:
Χρήση του "CallContext" στο .NET Core
Γνωρίζουμε ότι το CallContext δεν είναι πλέον διαθέσιμο για . NETStandard ή .NET Core.
Αλλά μπορείτε να χρησιμοποιήσετε το Asynclocal<T> για να μιμηθείτε ένα CallContext, απλώς δημιουργήστε την ακόλουθη στατική κλάση:
Χώροι ονομάτων που πρέπει να αναφέρονται:
Είναι επίσης εύκολο στη χρήση (εδώ έχω βάλει το CallContext στην Κοινή βιβλιοθήκη):
|