Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 27156|Răspunde: 2

[Sursă] EF DbContext garantează că contextul este unic

[Copiază linkul]
Postat pe 22.08.2020 10:21:31 | | |
Folosind EF pentru a manipula baza de date, a extrage DbContext (clasa de context a operării bazei de date) în aceeași cerere HTTP pentru a asigura unicitatea, articolul folosește două scheme pentru a asigura unicitatea contextului Entity Framework, iar soluția de pe platforma .NET Core este atașată.

Opțiunea 1

Dacă un obiect este garantat să fie global unic, cu siguranță vei gândi la un model clasic de design: modul singleton, dacă obiectul folosit trebuie să fie unic în firul de discuție?

Slot de date: CallContext, ok, vezi explicația msdn despre conținutul apelurilor.

CallContext este un obiect dedicat de colecție, similar cu un depozit thread-local pentru apeluri de metodă, și oferă un slot de date unic fiecărui fir logic de execuție. Sloturile de date nu sunt partajate între contextele apelurilor pe alte fire logice. Obiectele pot fi adăugate în CallContext atunci când acesta se propagă înainte și înapoi de-a lungul traseului codului de execuție și este inspectat de obiecte individuale din acel drum.

Adică, firul curent stochează obiectul în spațiul local de stocare al firului, iar obiectul este distrus pe măsură ce firul este distrus.

Folosește codul:



Scenarii de utilizare: Personal, cred că este folosit atunci când obiectul trebuie folosit global în cadrul firului de dischet, iar celelalte fire de extensie ale pachetelor de thread nu pot avea acces la el. De exemplu, în contextul de date al EF, un fir de discuție va fi generat pentru fiecare solicitare, iar în acest moment va fi creat un obiect de context de date pentru diferite funcții, care în final va fi făcut commit împreună pentru a evita problemele de tranzacții. Desigur, unii oameni m-ar putea întreba dacă pot crea o variabilă de folosit, care poate atinge același scop, desigur, dar acest obiect poate interacționa și cu alte date ale firului, ceea ce contravine conceptului de a fi unic în fir.

Opțiunea 2

Scenariul se bazează pe cereri web http, deoarece fiecare cerere este un fir nou, iar codul este următorul:



Folosirea "CallContext" în .NET Core

Știm că CallContext nu mai este disponibil pentru . NETStandard sau .NET Core.

Dar poți folosi Asynclocal<T> pentru a imita un CallContext, doar creează următoarea clasă statică:



Spații de nume care trebuie referențiate:



Este, de asemenea, ușor de folosit (aici am pus CallContext în biblioteca Common):





Precedent:ASP.NET MVC5 este lansat folosind modul precompilat, îmbunătățind viteza de încărcare a paginilor și performanța
Următor:[Întoarce]. NET exportă PPT ca imagine
Postat pe 25.08.2020 23:38:22 |
Nu e parfumat la infuzie?
 Proprietarul| Postat pe 26.08.2020 21:37:39 |
Cucumber Postat pe 2020-8-25 23:38
Nu e parfumat la infuzie?

Ciclul de viață implicit al injecției asp.net core nu corespunde nevoilor mele

Instanțele de serviciu create de obiectul Singleton: IServiceProvider sunt stocate pe obiectul IServiceProvider ca container rădăcină, astfel încât mai multe obiecte IServiceProvider cu aceeași rădăcină pentru același tip de instanțe de serviciu sunt toate pe același obiect.
Instanțele de serviciu create de obiectul Scoped:IServiceProvider sunt salvate singure, astfel încât instanțele de serviciu de același tip furnizate de același obiect IServiceProvider sunt toate același obiect.
Transient: Pentru fiecare cerere de furnizare a serviciului, obiectul IServiceProvider creează întotdeauna o nouă instanță de serviciu.
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com