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

Άποψη: 27156|Απάντηση: 2

[Πηγή] Το EF DbContext εγγυάται ότι το πλαίσιο είναι μοναδικό

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 22/8/2020 10:21:31 π.μ. | | |
Χρησιμοποιώντας το 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 στην Κοινή βιβλιοθήκη):





Προηγούμενος:ASP.NET MVC5 κυκλοφορεί χρησιμοποιώντας τη λειτουργία προμεταγλώττισης, βελτιώνοντας την ταχύτητα φόρτωσης και την απόδοση της σελίδας
Επόμενος:[Στροφή]. Το NET εξάγει PPT ως εικόνα
Δημοσιεύτηκε στις 25/8/2020 11:38:22 μ.μ. |
Δεν μυρίζει με έγχυμα;
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 26/8/2020 9:37:39 μ.μ. |

asp.net ο προεπιλεγμένος κύκλος ζωής έγχυσης του πυρήνα δεν ανταποκρίνεται στις ανάγκες μου

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

Mail To:help@itsvse.com