Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 27156|Antwort: 2

[Quelle] EF DbContext garantiert, dass der Kontext eindeutig ist

[Link kopieren]
Veröffentlicht am 22.08.2020 10:21:31 | | |
Indem EF zur Manipulation der Datenbank verwendet wird, der DbContext (Datenbankoperationen-Kontextklasse) in derselben HTTP-Anfrage extrahiert wird, um die Eindeutigkeit sicherzustellen, verwendet der Artikel zwei Schemata, um die Eindeutigkeit des Entity Framework-Kontexts zu gewährleisten, und die Lösung auf der .NET Core-Plattform ist angehängt.

Option 1

Wenn ein Objekt garantiert global eindeutig ist, wirst du definitiv an ein klassisches Designmuster denken: Singleton-Modus, wenn das zu verwendende Objekt im Thread eindeutig sein muss?

Datenslot: CallContext, ok, siehe msdns Erklärung zu Callcontent.

CallContext ist ein dediziertes Sammelobjekt, das einem thread-lokalen Speicher für Methodenaufrufe ähnelt und einen Datenslot bietet, der für jeden logischen Ausführungsthread einzigartig ist. Datenslots werden nicht zwischen Aufrufkontexten anderer logischer Threads geteilt. Objekte können dem CallContext hinzugefügt werden, wenn dieser entlang des Pfades des Ausführungscodes hin und her weiterläuft und von einzelnen Objekten in diesem Pfad inspiziert wird.

Das heißt, der aktuelle Thread speichert das Objekt im lokalen Speicher des Threads, und das Objekt wird vernichtet, während der Thread zerstört wird.

Verwenden Sie Code:



Anwendungsszenarien: Ich persönlich denke, es wird verwendet, wenn das Objekt global innerhalb des Threads verwendet werden muss und die anderen Thread-Paketerweiterungen nicht darauf zugreifen können. Zum Beispiel wird im Datenkontext von EF für jede Anfrage ein Thread generiert, und zu diesem Zeitpunkt wird ein Datenkontextobjekt für verschiedene Funktionen erstellt, die schließlich gemeinsam committen, um Transaktionsprobleme zu vermeiden. Natürlich fragen mich manche Leute, ob ich eine Variable erstellen kann, die natürlich denselben Zweck erfüllt, aber dieses Objekt kann auch mit anderen Thread-Daten interagieren, was dem Konzept widerspricht, im Thread einzigartig zu sein.

Option 2

Das Szenario basiert auf Web-HTTP-Anfragen, da jede Anfrage ein neuer Thread ist und der Code wie folgt aussieht:



Verwendung von "CallContext" in .NET Core

Wir wissen, dass CallContext für nicht mehr verfügbar ist. NETStandard oder .NET Core.

Aber du kannst AsyncLocal verwenden<T>, um einen CallContext zu imitieren, einfach die folgende statische Klasse erstellen:



Namensräume, die referenziert werden müssen:



Es ist außerdem einfach zu bedienen (hier habe ich CallContext in die Common-Bibliothek gelegt):





Vorhergehend:ASP.NET MVC5 wird im vorkompilierten Modus veröffentlicht, was die Seitenladegeschwindigkeit und -leistung verbessert
Nächster:[Dreh dich]. NET exportiert PPT als Bild
Veröffentlicht am 25.08.2020 23:38:22 |
Duftet es nicht nach der Infusion?
 Vermieter| Veröffentlicht am 26.08.2020 21:37:39 |
Cucumber veröffentlicht am 25.8.2020, 23:38 Uhr
Duftet es nicht nach der Infusion?

asp.net Standard-Injektionszyklus des Kerns entspricht nicht meinen Bedürfnissen

Die vom Singleton: IServiceProvider-Objekt erstellten Service-Instanzen werden als Root-Container auf dem IServiceProvider-Objekt gespeichert, sodass mehrere IServiceProvider-Objekte mit derselben Wurzel für denselben Diensttyp alle im selben Objekt sind.
Die vom Scoped:IServiceProvider-Objekt erstellten Service-Instanzen werden für sich selbst gespeichert, sodass die Service-Instanzen desselben Typs, die vom selben IServiceProvider-Objekt bereitgestellt werden, alle dasselbe Objekt sind.
Transient: Für jede Service Provision-Anfrage erstellt das IServiceProvider-Objekt immer eine neue Service-Instanz.
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com