Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 27156|Atsakyti: 2

[Šaltinis] EF DbContext garantuoja, kad kontekstas yra unikalus

[Kopijuoti nuorodą]
Paskelbta 2020-08-22 10:21:31 | | |
Naudojant EF manipuliuoti duomenų baze, išskleisti DbContext (duomenų bazės operacijos konteksto klasę) toje pačioje HTTP užklausoje, kad būtų užtikrintas unikalumas, straipsnyje naudojamos dvi schemos, užtikrinančios subjektų sistemos konteksto unikalumą, ir pridedamas sprendimas .NET Core platformoje.

1 variantas

Jei objektas garantuotai bus unikalus visame pasaulyje, tikrai pagalvosite apie klasikinį dizaino modelį: singletono režimą, jei naudojamas objektas turi būti unikalus siūle?

Duomenų lizdas: CallContext, gerai žr. msdn paaiškinimą callcontent.

CallContext yra specialus rinkinio objektas, panašus į gijos vietinę saugyklą, skirtą metodų iškvietimams, ir suteikia duomenų lizdą, kuris yra unikalus kiekvienai loginei vykdymo gijai. Duomenų lizdai nėra bendrinami tarp skambučių kontekstų kitose loginėse gijose. Objektai gali būti įtraukti į CallContext, kai jis plinta pirmyn ir atgal vykdymo kodo keliu ir yra tikrinamas atskirų objektų tame kelyje.

Tai reiškia, kad dabartinė gija saugo objektą vietinėje gijos saugykloje, o objektas sunaikinamas, kai gija sunaikinama.

Naudokite kodą:



Naudojimo scenarijai: Aš asmeniškai manau, kad jis naudojamas, kai objektas turi būti naudojamas globaliai per giją, ir kitų gijų paketo išplėtimo gijos negali pasiekti jį. Pavyzdžiui, EF duomenų kontekste kiekvienai užklausai bus sugeneruota gija, o šiuo metu bus sukurtas duomenų konteksto objektas, skirtas skirtingoms funkcijoms naudoti, ir galiausiai įsipareigoti kartu, kad būtų išvengta operacijų problemų. Žinoma, kai kurie žmonės gali manęs paklausti, ar galiu sukurti kintamąjį, kuris, žinoma, taip pat gali pasiekti tą patį tikslą, tačiau šis objektas taip pat gali sąveikauti su kitais gijų duomenimis, o tai prieštarauja koncepcijai, kad gija yra unikali.

2 variantas

Scenarijus pagrįstas žiniatinklio http užklausomis, nes kiekviena užklausa yra nauja gija, o kodas yra toks:



"CallContext" naudojimas .NET Core

Žinome, kad "CallContext" nebegalima naudoti . NETStandard arba .NET Core.

Tačiau galite naudoti Asynclocal<T>, kad imituotumėte CallContext, tiesiog sukurkite šią statinę klasę:



Vardų sritys, kurias reikia nurodyti:



Tai taip pat paprasta naudoti (čia aš įdėjau CallContext į bendrą biblioteką):





Ankstesnis:ASP.NET MVC5 išleidžiamas naudojant iš anksto sukompiliuotą režimą, pagerinant puslapio įkėlimo greitį ir našumą
Kitą:[Posūkis]. NET eksportuoja PPT kaip paveikslėlį
Paskelbta 2020-08-25 23:38:22 |
Ar jis nėra kvapnus užpilu?
 Savininkas| Paskelbta 2020-08-26 21:37:39 |
Agurkas Publikuota 2020-8-25 23:38
Ar jis nėra kvapnus užpilu?

asp.net branduolio numatytasis įpurškimo ciklas neatitinka mano poreikių

Objekto Singleton: IServiceProvider sukurti tarnybos egzemplioriai saugomi IServiceProvider objekte kaip šakninis konteineris, todėl keli IServiceProvider objektai su ta pačia šaknimine to paties tipo tarnybos egzemplioriais yra tame pačiame objekte.
Objekto Scoped:IServiceProvider sukurti tarnybos egzemplioriai įrašomi patys, todėl to paties tipo tarnybos egzemplioriai, kuriuos teikia tas pats IServiceProvider objektas, yra tas pats objektas.
Trumpalaikis: kiekvienai paslaugos teikimo užklausai objektas IServiceProvider visada sukuria naują tarnybos egzempliorių.
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com