Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 27156|Odpoveď: 2

[Zdroj] EF DbContext zaručuje, že kontext je jedinečný

[Kopírovať odkaz]
Zverejnené 22. 8. 2020 10:21:31 | | |
Použitím EF na manipuláciu s databázou, extrahovanie DbContext (trieda kontextu operácie databázy) v tej istej HTTP požiadavke na zabezpečenie jedinečnosti, článok používa dve schémy na zabezpečenie jedinečnosti kontextu Entity Framework a riešenie na platforme .NET Core je pripojené.

Možnosť 1

Ak je objekt zaručene globálne jedinečný, určite si predstavíte klasický dizajnový vzor: singleton režim, ak musí byť použitý objekt jedinečný vo vlákne?

Dátový slot: CallContext, pozri vysvetlenie callcontentu na msdn.

CallContext je vyhradený objekt kolekcie podobný vláknovému lokálnemu úložisku pre volania metód a poskytuje dátový slot, ktorý je jedinečný pre každé logické vykonávacie vlákno. Dátové sloty nie sú zdieľané medzi kontextmi volaní na iných logických vláknach. Objekty môžu byť pridané do CallContext, keď sa šíri tam a späť po ceste vykonávacieho kódu a je kontrolovaný jednotlivými objektmi v tejto ceste.

To znamená, že aktuálne vlákno uloží objekt do lokálneho úložiska vlákna a objekt sa zničí, keď je vlákno zničené.

Použite kód:



Scenáre použitia: Osobne si myslím, že sa používa, keď je potrebné objekt použiť globálne v rámci vlákna a ostatné vlákna rozšírenia balíkov k nemu nemajú prístup. Napríklad v dátovom kontexte EF sa pre každú požiadavku vygeneruje vlákno a v tomto čase sa vytvorí dátový kontextový objekt pre rôzne funkcie, ktoré sa nakoniec spoločne commitujú, aby sa predišlo transakčným problémom. Samozrejme, niektorí ľudia sa ma môžu opýtať, či môžem vytvoriť premennú na použitie, ktorá môže dosiahnuť rovnaký účel, ale tento objekt môže tiež interagovať s inými vláknovými dátami, čo je v rozpore s konceptom jedinečnosti vo vlákne.

Možnosť 2

Scenár je založený na webových HTTP požiadavkách, pretože každá požiadavka je nové vlákno a kód je nasledovný:



Použitie "CallContext" v .NET Core

Vieme, že CallContext už nie je dostupný pre . NETStandard alebo .NET Core.

Ale môžete použiť Asynclocal<T> na napodobnenie CallContext, stačí vytvoriť nasledujúcu statickú triedu:



Menné priestory, na ktoré je potrebné odkazovať:



Je tiež jednoduchý na používanie (tu som dal CallContext do knižnice Common):





Predchádzajúci:ASP.NET MVC5 je vydaný v predkompilovanom režime, čím sa zlepšuje rýchlosť načítavania stránky a výkon
Budúci:[Otoč]. NET exportuje PPT ako obrázok
Zverejnené 25. 8. 2020 23:38:22 |
Nie je to voňavé po infúzii?
 Prenajímateľ| Zverejnené 26. 8. 2020 21:37:39 |
Cucumber Zverejnené 25.8.2020 23:38
Nie je to voňavé po infúzii?

Predvolený životný cyklus injekcie asp.net core nespĺňa moje potreby

Inštancie služieb vytvorené objektom Singleton: IServiceProvider sú uložené na objekte IServiceProvider ako koreňový kontajner, takže viacero objektov IServiceProvider s rovnakým koreňom pre rovnaký typ inštancií služieb je všetkých na tom istom objekte.
Inštancie služieb vytvorené objektom Scoped:IServiceProvider sa ukladajú samostatne, takže inštancie služieb rovnakého typu, ktoré poskytuje ten istý objekt IServiceProvider, sú všetky ten istý objekt.
Transient: Pre každý požiadavku na poskytovanie služby objekt IServiceProvider vždy vytvorí novú inštanciu služby.
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com