Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 27156|Antwoord: 2

[Bron] EF DbContext garandeert dat de context uniek is

[Link kopiëren]
Geplaatst op 22-08-2020 10:21:31 | | |
Met EF om de database te manipuleren, de DbContext (database operation context class) te extraheren in hetzelfde HTTP-verzoek om uniciteit te waarborgen, gebruikt het artikel twee schema's om de uniciteit van de Entity Framework-context te waarborgen, en de oplossing op het .NET Core-platform is gekoppeld.

Optie 1

Als een object gegarandeerd wereldwijd uniek is, denk je zeker aan een klassiek ontwerppatroon: singleton-modus, als het object dat gebruikt moet worden uniek moet zijn in de thread?

Dataslot: CallContext, oké, zie de uitleg van msdn over callcontent.

CallContext is een toegewijd verzamelobject vergelijkbaar met een thread-local store voor methode-aanroepen, en biedt een dataslot dat uniek is voor elke logische uitvoeringsdraad. Dataslots worden niet gedeeld tussen aanroepcontexten op andere logische threads. Objecten kunnen aan de CallContext worden toegevoegd wanneer deze heen en weer beweegt langs het pad van de uitvoeringscode en wordt geïnspecteerd door individuele objecten in dat pad.

Dat wil zeggen, de huidige thread slaat het object op in de lokale opslag van de thread, en het object wordt vernietigd terwijl de thread wordt vernietigd.

Gebruik code:



Gebruiksscenario's: Ik denk persoonlijk dat het wordt gebruikt wanneer het object globaal binnen de thread gebruikt moet worden, en de andere threads van threadpakketextensie er geen toegang toe hebben. Bijvoorbeeld, in de datacontext van EF wordt voor elk verzoek een thread gegenereerd, en op dat moment wordt een datacontextobject gemaakt voor verschillende functies om te gebruiken en uiteindelijk samen te committen om transactieproblemen te voorkomen. Natuurlijk zullen sommige mensen me vragen of ik een variabele kan maken om te gebruiken, die natuurlijk hetzelfde doel kan bereiken, maar dit object kan ook interageren met andere threaddata, wat indruist tegen het concept van uniek zijn in de thread.

Optie 2

Het scenario is gebaseerd op web-http-verzoeken, omdat elk verzoek een nieuwe thread is en de code als volgt is:



Gebruik van "CallContext" in .NET Core

We weten dat CallContext niet langer beschikbaar is voor . NETStandard of .NET Core.

Maar je kunt Asynclocal gebruiken<T> om een CallContext na te bootsen, maak gewoon de volgende statische klasse:



Naamruimtes die moeten worden geraadpleegd:



Het is ook eenvoudig te gebruiken (hier heb ik CallContext in de Common-bibliotheek gezet):





Vorig:ASP.NET MVC5 wordt uitgebracht in de voorgecompileerde modus, wat de laadsnelheid en prestaties van pagina's verbetert
Volgend:[Draai]. NET exporteert PPT als een afbeelding
Geplaatst op 25-08-2020 23:38:22 |
Ruikt het niet naar infusie?
 Huisbaas| Geplaatst op 26-08-2020 21:37:39 |
Cucumber Geplaatst op 25-8-2020 23:38
Ruikt het niet naar infusie?

De standaard injectiecyclus van asp.net core voldoet niet aan mijn behoeften

De service-instanties die door het Singleton: IServiceProvider-object worden gecreëerd, worden opgeslagen op het IServiceProvider-object als de root-container, dus meerdere IServiceProvider-objecten met dezelfde root voor hetzelfde type service-instanties zitten allemaal op hetzelfde object.
De service-instanties die door het Scoped:IServiceProvider-object worden gemaakt, worden op zichzelf opgeslagen, dus de service-instanties van hetzelfde type die door hetzelfde IServiceProvider-object worden geleverd, zijn allemaal hetzelfde object.
Transient: Voor elk serviceleveringsverzoek maakt het IServiceProvider-object altijd een nieuwe service-instantie aan.
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com