Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 27156|Svar: 2

[Källa] EF DbContext garanterar att kontexten är unik

[Kopiera länk]
Publicerad på 2020-08-22 10:21:31 | | |
Genom att använda EF för att manipulera databasen, extrahera DbContext (databasens operationskontextklass) i samma HTTP-förfrågan för att säkerställa unikhet, använder artikeln två scheman för att säkerställa Unikheten i Entity Framework-kontexten, och lösningen på .NET Core-plattformen är kopplad.

Alternativ 1

Om ett objekt garanterat är globalt unikt, kommer du definitivt att tänka på ett klassiskt designmönster: singleton-läge, om objektet som ska användas måste vara unikt i tråden?

Dataplats: CallContext, okej, se msdn:s förklaring av callcontent.

CallContext är ett dedikerat samlingsobjekt liknande en trådlokal lagring för metodanrop, och tillhandahåller en dataplats som är unik för varje logisk exekveringstråd. Dataplatser delas inte mellan anropskontexter på andra logiska trådar. Objekt kan läggas till i CallContext när den propagerar fram och tillbaka längs exekveringskodens path och inspekteras av enskilda objekt i den pathen.

Det vill säga, den aktuella tråden lagrar objektet i trådens lokala lagring, och objektet förstörs samtidigt som tråden förstörs.

Använd kod:



Användningsscenarier: Jag tror personligen att det används när objektet behöver användas globalt inom tråden, och de andra trådarnas paketförlängningstrådar inte kan komma åt det. Till exempel, i EF:s datakontext genereras en tråd för varje förfrågan, och vid denna tidpunkt skapas ett datakontextobjekt för olika funktioner att använda, och slutligen committa tillsammans för att undvika transaktionsproblem. Självklart kan vissa fråga mig om jag kan skapa en variabel att använda, vilket också kan uppnå samma syfte, förstås, men detta objekt kan också interagera med annan tråddata, vilket går emot konceptet att vara unik i tråden.

Alternativ 2

Scenariot baseras på web-http-förfrågningar, eftersom varje förfrågan är en ny tråd, och koden är följande:



Att använda "CallContext" i .NET Core

Vi vet att CallContext inte längre är tillgängligt för . NETStandard eller .NET Core.

Men du kan använda Asynclocal<T> för att efterlikna en CallContext, skapa bara följande statiska klass:



Namnrymder som behöver refereras:



Det är också lätt att använda (här har jag lagt CallContext i Common-biblioteket):





Föregående:ASP.NET MVC5 släpps i förkompilerat läge, vilket förbättrar sidladdningshastighet och prestanda
Nästa:[Vänd]. NET exporterar PPT som en bild
Publicerad på 2020-08-25 23:38:22 |
Är det inte doftande av infusion?
 Hyresvärd| Publicerad på 2020-08-26 21:37:39 |
Gurka Publicerad den 2020-8-25 23:38
Är det inte doftande av infusion?

asp.net kärnans standardinjektionslivscykel uppfyller inte mina behov

De tjänsteinstanser som skapas av objektet Singleton: IServiceProvider lagras på IServiceProvider-objektet som rotcontainern, så flera IServiceProvider-objekt med samma rot för samma typ av tjänsteinstanser finns alla på samma objekt.
De tjänsteinstanser som skapas av objektet Scoped:IServiceProvider sparas av sig själva, så tjänsteinstanserna av samma typ som tillhandahålls av samma IServiceProvider-objekt är alla samma objekt.
Transient: För varje tjänsteleveransförfrågan skapar IServiceProvider-objektet alltid en ny tjänsteinstans.
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com