Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 27156|Atbildi: 2

[Avots] EF DbContext garantē, ka konteksts ir unikāls

[Kopēt saiti]
Publicēts 22.08.2020 10:21:31 | | |
Izmantojot EF, lai manipulētu ar datu bāzi, izvilktu DbContext (datu bāzes operācijas konteksta klasi) tajā pašā HTTP pieprasījumā, lai nodrošinātu unikalitāti, rakstā tiek izmantotas divas shēmas, lai nodrošinātu Entity Framework konteksta unikalitāti, un ir pievienots risinājums .NET Core platformā.

1. variants

Ja objekts ir garantēts globāli unikāls, jūs noteikti domājat par klasisku dizaina modeli: singleton režīmu, ja izmantojamajam objektam jābūt unikālam pavedienā?

Datu slots: CallContext, labi skatiet msdn skaidrojumu par zvana saturu.

CallContext ir īpašs kolekcijas objekts, kas līdzīgs pavediena lokālajai krātuvei metodes izsaukumiem, un nodrošina datu slotu, kas ir unikāls katram loģiskās izpildes pavedienam. Datu sloti netiek koplietoti starp zvanu kontekstiem citos loģiskajos pavedienos. Objektus var pievienot CallContext, kad tas izplatās uz priekšu un atpakaļ pa izpildes koda ceļu un tiek pārbaudīts ar atsevišķiem objektiem šajā ceļā.

Tas nozīmē, ka pašreizējais pavediens saglabā objektu pavediena lokālajā krātuvē, un objekts tiek iznīcināts, kad pavediens tiek iznīcināts.

Izmantojiet kodu:



Lietošanas scenāriji: Es personīgi domāju, ka tas tiek izmantots, ja objekts ir jāizmanto globāli pavedienā, un citi pavedienu pakotnes paplašinājuma pavedieni tam nevar piekļūt. Piemēram, EF datu kontekstā katram pieprasījumam tiks ģenerēts pavediens, un šajā laikā tiks izveidots datu konteksta objekts, lai izmantotu dažādas funkcijas un visbeidzot kopīgi apņemtos, lai izvairītos no darījumu problēmām. Protams, daži cilvēki man var jautāt, vai es varu izveidot mainīgo, kas, protams, var sasniegt arī to pašu mērķi, bet šis objekts var mijiedarboties arī ar citiem pavediena datiem, kas ir pretrunā ar jēdzienu par unikālu pavedienu.

2. variants

Scenārija pamatā ir tīmekļa http pieprasījumi, jo katrs pieprasījums ir jauns pavediens, un kods ir šāds:



"CallContext" izmantošana .NET Core

Mēs zinām, ka CallContext vairs nav pieejams . NETStandard vai .NET Core.

Bet jūs varat izmantot Asynclocal<T>, lai atdarinātu CallContext, vienkārši izveidojiet šādu statisko klasi:



Nosaukumvietas, uz kurām jāatsaucas:



Tas ir arī viegli lietojams (šeit es esmu ievietojis CallContext kopējā bibliotēkā):





Iepriekšējo:ASP.NET MVC5 tiek izlaists, izmantojot iepriekš kompilētu režīmu, uzlabojot lapas ielādes ātrumu un veiktspēju
Nākamo:[Pagrieziens]. NET eksporta PPT kā attēls
Publicēts 25.08.2020 23:38:22 |
Vai tas nav smaržīgs ar infūziju?
 Saimnieks| Publicēts 26.08.2020 21:37:39 |
Gurķis Publicēts 2020-8-25 23:38
Vai tas nav smaržīgs ar infūziju?

asp.net kodola noklusējuma iesmidzināšanas dzīves cikls neatbilst manām vajadzībām

Objekta Singleton: IServiceProvider izveidotās pakalpojuma instances tiek glabātas IServiceProvider objektā kā saknes konteiners, tāpēc vairāki IServiceProvider objekti ar vienu un to pašu sakni viena tipa pakalpojuma instancēm atrodas vienā objektā.
Objekta Scoped:IServiceProvider izveidotās pakalpojuma instances tiek saglabātas pašas, tāpēc viena tipa pakalpojuma instances, ko nodrošina viens un tas pats IServiceProvider objekts, ir viens un tas pats objekts.
Īslaicīgs: katram pakalpojuma sniegšanas pieprasījumam objekts IServiceProvider vienmēr izveido jaunu pakalpojuma instanci.
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com