EF-i kasutamine andmebaasi manipuleerimiseks, DbContext (andmebaasi operatsiooni kontekstiklass) väljavõtmine samas HTTP päringus unikaalsuse tagamiseks, artiklis kasutatakse kahte skeemi Entity Frameworki unikaalsuse tagamiseks ning lahendus .NET Core platvormil on lisatud.
Variant 1
Kui objekt on garanteeritult globaalselt unikaalne, siis mõtled kindlasti klassikalisele disainimustrile: singleton-režiim, kui objekt, mida kasutatakse, peab olema lõimes unikaalne?
Andmepesa: CallContext, okei, vaata msdn-i selgitust callcontenti kohta.
CallContext on pühendatud kogumisobjekt, mis sarnaneb lõime-lokaalse salvestusega metoodikutsete jaoks ning pakub andmepesa, mis on iga loogilise täitmise lõime jaoks unikaalne. Andmepesad ei ole teiste loogiliste lõimede kõnekontekstide vahel jagatud. Objekte saab lisada CallContexti, kui see liigub edasi-tagasi täitmiskoodi teel ja seda kontrollivad üksikud objektid selles teekonnas.
See tähendab, et praegune lõim salvestab objekti lõime lokaalsesse salvestusse ja objekt hävitatakse, kui lõim hävib.
Kasuta koodi:
Kasutusolukorrad: Isiklikult arvan, et seda kasutatakse siis, kui objekti tuleb kasutada globaalselt lõimes ja teised lõimepaketi laienduse lõimed ei pääse sellele ligi. Näiteks EF-i andmekontekstis genereeritakse iga päringu jaoks lõim ning sel hetkel luuakse andmekonteksti objekt, mida erinevad funktsioonid saavad kasutada ja lõpuks koos siduda, et vältida tehinguprobleeme. Muidugi võivad mõned inimesed küsida, kas ma võiksin luua muutuja, mida kasutada, mis võib samuti sama eesmärki täita, kuid see objekt võib suhelda ka teiste lõimeandmetega, mis on vastuolus unikaalsuse kontseptsiooniga lõimes.
Variant 2
Stsenaarium põhineb veebi http-päringutel, sest iga päring on uus lõim ja kood on järgmine:
"CallContext" kasutamine .NET Core'is
Me teame, et CallContext ei ole enam saadaval . NETStandard või .NET Core.
Aga sa võid kasutada<T> Asynclocali CallContexti jäljendamiseks, lihtsalt loo järgmine staatiline klass:
Nimeruumid, millele tuleb viidata:
Seda on ka lihtne kasutada (siin olen CallContexti pannud Commoni teeki):
|