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):
|