Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 27156|Risposta: 2

[Fonte] EF DbContext garantisce che il contesto sia unico

[Copiato link]
Pubblicato su 22/08/2020 10:21:31 | | |
Utilizzando EF per manipolare il database, estrarre il DbContext (classe di contesto operativo del database) nella stessa richiesta HTTP per garantire l'unicità, l'articolo utilizza due schemi per garantire l'unicità del contesto dell'Entity Framework, e la soluzione sulla piattaforma .NET Core è collegata.

Opzione 1

Se un oggetto è garantito come unico a livello globale, penserai sicuramente a un pattern di design classico: modalità singleton, se l'oggetto da usare deve essere unico nel thread?

Data Slot: CallContext, ok, vedi la spiegazione msdn sul callcontent.

CallContext è un oggetto di raccolta dedicato simile a uno store thread-locale per le chiamate al metodo, e fornisce uno slot dati unico per ogni thread di esecuzione logica. Gli slot dati non sono condivisi tra i contesti delle chiamate su altri thread logici. Gli oggetti possono essere aggiunti al CallContext quando questo si propaga avanti e indietro lungo il percorso del codice di esecuzione ed è ispezionato da singoli oggetti in quel percorso.

Cioè, il thread corrente memorizza l'oggetto nella memoria locale del thread, e l'oggetto viene distrutto man mano che il thread viene distrutto.

Usa il codice:



Scenari d'uso: personalmente penso che venga usato quando l'oggetto deve essere usato globalmente all'interno del thread, e gli altri thread di estensione del pacchetto thread non possono accedervi. Ad esempio, nel contesto dati di EF, verrà generato un thread per ogni richiesta e, in questo momento, verrà creato un oggetto contesto dati per diverse funzioni da utilizzare, che infine verrà effettuato un commit insieme per evitare problemi di transazione. Certo, alcune persone potrebbero chiedermi se posso creare una variabile da usare, che può anche raggiungere lo stesso scopo, ma questo oggetto può anche interagire con altri dati del thread, il che va contro il concetto di essere unico nel thread.

Opzione 2

Lo scenario si basa sulle richieste web http, perché ogni richiesta è un nuovo thread, e il codice è il seguente:



Utilizzo di "CallContext" in .NET Core

Sappiamo che CallContext non è più disponibile per . NETStandard o .NET Core.

Ma puoi usare Asynclocal<T> per imitare un CallContext, basta creare la seguente classe statica:



Namespace che devono essere consultati:



È anche facile da usare (qui ho inserito CallContext nella libreria Common):





Precedente:ASP.NET MVC5 viene rilasciato utilizzando la modalità precompilata, migliorando la velocità di caricamento e le prestazioni della pagina
Prossimo:[Gira]. NET esporta PPT come immagine
Pubblicato su 25/08/2020 23:38:22 |
Non è profumata con infusione?
 Padrone di casa| Pubblicato su 26/08/2020 21:37:39 |
Cucumber Pubblicato il 25-08-2020 alle 23:38
Non è profumata con infusione?

Il ciclo di vita predefinito dell'iniezione di asp.net core non soddisfa le mie esigenze

Le istanze di servizio create dall'oggetto Singleton: IServiceProvider sono memorizzate sull'oggetto IServiceProvider come contenitore radice, quindi più oggetti IServiceProvider con la stessa radice per lo stesso tipo di istanze di servizio sono tutti sullo stesso oggetto.
Le istanze di servizio create dall'oggetto Scoped:IServiceProvider vengono salvate da sole, quindi le istanze di servizio dello stesso tipo fornite dallo stesso oggetto IServiceProvider sono tutte lo stesso oggetto.
Transitorio: Per ogni richiesta di fornitura di servizio, l'oggetto IServiceProvider crea sempre una nuova istanza di servizio.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com