Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 27156|Vastaus: 2

[Lähde] EF DbContext takaa, että konteksti on yksikäsitteinen

[Kopioi linkki]
Julkaistu 22.8.2020 10.21.31 | | |
EF:n avulla tietokantaa käsitellään, DbContextin (tietokantaoperaatiokontekstiluokka) poimiminen samassa HTTP-pyynnössä ainutlaatuisuuden varmistamiseksi, artikkelissa käytetään kahta menetelmää Entity Frameworkin ainutlaatuisuuden varmistamiseksi, ja .NET Core -alustan ratkaisu liitetään.

Vaihtoehto 1

Jos objekti on taattu, että se on globaalisti ainutlaatuinen, keksit varmasti klassisen suunnittelumallin: singleton-tila, jos käytettävän objektin täytyy olla ainutlaatuinen säikeessä?

Datapaikka: CallContext, ok katso msdn:n selitys callcontentista.

CallContext on omistettu kokoelma-objekti, joka muistuttaa säikeen paikallista tallennusta metodikutsuille, ja tarjoaa datapaikan, joka on ainutlaatuinen jokaiselle loogiselle suoritussäikeelle. Datapaikkoja ei jaeta puhelukontekstien välillä muissa loogisissa säikeissä. Olioita voidaan lisätä CallContextiin, kun se etenee edestakaisin suorituskoodin polun varrella ja yksittäisten olioiden tarkastelema kyseisellä polulla.

Toisin sanoen nykyinen säie tallentaa objektin säikeen paikalliseen tallennustilaan, ja objekti tuhoutuu säikeen tuhoamisen mukana.

Käytä koodia:



Käyttötilanteet: Mielestäni sitä käytetään, kun objektia täytyy käyttää globaalisti säikeessä ja muut säikepaketin laajennussäikeet eivät pääse siihen käsiksi. Esimerkiksi EF:n datakontekstissa jokaiselle pyynnölle luodaan säie, ja tällöin luodaan datakontekstiobjekti, jota eri funktiot voivat käyttää, ja lopuksi yhdistetään transaktio-ongelmien välttämiseksi. Tietenkin jotkut saattavat kysyä minulta, voinko luoda käytettävissä olevan muuttujan, joka voi myös saavuttaa saman tarkoituksen, mutta tämä objekti voi myös olla vuorovaikutuksessa muiden säikeiden tietojen kanssa, mikä on ristiriidassa ainutlaatuisuuden käsitteen kanssa.

Vaihtoehto 2

Tilanne perustuu web-http-pyyntöihin, koska jokainen pyyntö on uusi säie, ja koodi on seuraava:



"CallContextin" käyttö .NET Coressa

Tiedämme, että CallContext ei ole enää saatavilla . NETStandard tai .NET Core.

Mutta voit käyttää<T> Asynclocalia matkimaan CallContextia, luo vain seuraava staattinen luokka:



Nimiavaruudet, joihin täytyy viitata –



Se on myös helppokäyttöinen (tässä olen laittanut CallContextin Common-kirjastoon):





Edellinen:ASP.NET MVC5 julkaistaan esikäännetyllä tavalla, mikä parantaa sivun latausnopeutta ja suorituskykyä
Seuraava:[Käänny]. NET vie PPT:tä kuvana
Julkaistu 25.8.2020 23.38.22 |
Eikö se tuoksua infuusiosta?
 Vuokraisäntä| Julkaistu 26.8.2020 21.37.39 |
Kurkku Julkaistu 25.8.2020 klo 23:38
Eikö se tuoksua infuusiosta?

asp.net ytimen oletusinjektion elinkaari ei täytä tarpeitani

Singleton: IServiceProvider-objektin luomat palveluinstanssit tallennetaan IServiceProvider-objektiin juurikonttina, joten useat IServiceProvider-objektit, joilla on sama juuri samantyyppisille palveluinstansseille, ovat kaikki samalla objektilla.
Scoped:IServiceProvider-objektin luomat palveluinstanssit tallennetaan itsekseen, joten saman tyyppiset palveluinstanssit, joita sama IServiceProvider-objekti tarjoaa, ovat kaikki sama objekti.
Transientti: Jokaiselle palveluntuottopyynnölle IServiceProvider-olio luo aina uuden palveluinstanssin.
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com