Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 27156|Válasz: 2

[Forrás] Az EF DbContext garantálja, hogy a kontextus egyedi

[Linket másol]
Közzétéve 2020. 08. 22. 10:21:31 | | |
Az EF segítségével manipulálják az adatbázist, ugyanabban a HTTP kérésben kihúzzák a DbContext-et (adatbázis műveleti kontextusosztály) az egyediség érdekében, a cikk két sémát használ az Entity Framework kontextusának egyediségének biztosítására, és a .NET Core platformon található megoldás is csatolva.

1. lehetőség

Ha egy objektum garantáltan globálisan egyedi, akkor biztosan egy klasszikus tervezési mintát fogsz találni: singleton mód, ha a használt objektumnak egyedinek kell lennie a szálban?

Adathely: CallContext, oké, lásd az msdn callcontent magyarázatát.

A CallContext egy dedikált gyűjteményobjektum, amely hasonlít a méducélhívások szál-lokális tárolójához, és minden logikai végrehajtási szálhoz egyedi adathelyet biztosít. Az adathelyek nem osztoznak meg más logikai szálakon a híváskontextusok között. Objektumok hozzáadhatók a CallContexthez, amikor az előre-vissza terjed a végrehajtó kód útvonalán, és az adott útvonalon egyes objektumok vizsgálják őket.

Vagyis a jelenlegi szál tárolja az objektumot a szál helyi tárolójában, és az objektum megsemmisül, ahogy a szál megsemmisül.

Kódot használj:



Használati forgatókönyvek: Személy szerint úgy gondolom, hogy akkor használják, ha az objektumot globálisan kell használni a szálon belül, és a többi szálcsomag kiterjesztési szál nem fér hozzá. Például az EF adatkontextusában minden kéréshez egy szálat generálnak, és ekkor egy adatkontextus objektumot hoznak létre különböző függvények számára, amelyeket végül együtt köteleznek el a tranzakciós problémák elkerülése érdekében. Természetesen néhányan megkérdezhetik, hogy létrehozhatok-e egy változót, ami szintén ugyanezt a célt érheti, de ez az objektum más száladatokkal is képes interakcióba lépni, ami ellentétes azzal a koncepcióval, hogy a szálban egyediség lenne.

2. lehetőség

A forgatókönyv webes http-kéréseken alapul, mert minden kérés egy új szál, és a kód a következő:



A "CallContext" használata a .NET Core-ban

Tudjuk, hogy a CallContext már nem elérhető . NETStandard vagy .NET Core.

De használhatsz<T> Asynclocal-t egy CallContext utánozására, csak hozd létre a következő statikus osztályt:



Névterek, amelyekre hivatkozni kell:



Használata is könnyű (itt a CallContext-et a Common könyvtárba tettem):





Előző:ASP.NET MVC5 előre fordított módban jelenik meg, javítva az oldalbetöltési sebességet és a teljesítményt
Következő:[Fordulás]. A NET PPT-t exportál képként
Közzétéve 2020. 08. 25. 23:38:22 |
Nem illatos az infúzióval?
 Háziúr| Közzétéve 2020. 08. 26. 21:37:39 |
Cucumber Közzétéve: 2020-8-25 23:38
Nem illatos az infúzióval?

asp.net mag alapértelmezett injekciós életciklusa nem felel meg az igényeimnek

A Singleton: IServiceProvider objektum által létrehozott szolgáltatáspéldányok az IServiceProvider objektumon vannak tárolva, mint gyökérkonténer, így több IServiceProvider objektum ugyanazzal a gyökérrel ugyanazon a szolgáltatástípushoz ugyanazon objektumon található.
A Scoped:IServiceProvider objektum által létrehozott szolgáltatáspéldányok önmaguktól mentődnek el, így ugyanaz a típusú szolgáltatáspéldányok, amelyeket ugyanaz az IServiceProvider objektum biztosít, mind ugyanaz az objektum.
Átmeneti: Minden szolgáltatásszolgáltatási kéréshez az IServiceProvider objektum mindig új szolgáltatási példányt hoz létre.
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com