Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 27156|Odpověď: 2

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

[Kopírovat odkaz]
Zveřejněno 22.08.2020 10:21:31 | | |
Pomocí EF pro manipulaci s databází, extrakce DbContext (třída databázových operací) ve stejném HTTP požadavku pro zajištění jedinečnosti, článek používá dvě schémata k zajištění jedinečnosti kontextu Entity Framework a řešení na platformě .NET Core je připojeno.

Možnost 1

Pokud je objekt zaručeně globálně jedinečný, určitě si představíte klasický návrhový vzor: singleton mode, pokud musí být použitý objekt jedinečný ve vlákně?

Datový slot: CallContext, viz vysvětlení callcontentu v msdn.

CallContext je dedikovaný objekt kolekce podobný vláknovému lokálnímu úložišti pro volání metod a poskytuje datový slot, který je jedinečný pro každé logické vykonávací vlákno. Datové sloty nejsou sdíleny mezi kontexty volání na jiných logických vláknech. Objekty lze přidávat do CallContextu, když se šíří tam a zpět po cestě vykonávacího kódu a je kontrolován jednotlivými objekty v této cestě.

To znamená, že aktuální vlákno uloží objekt do lokálního úložiště vlákna a objekt je zničen, jakmile je vlákno zničeno.

Použijte kód:



Scénáře použití: Osobně si myslím, že se používá, když je potřeba objekt globálně použít ve vlákně a ostatní vlákna rozšíření thread package k němu nemají přístup. Například v datovém kontextu EF bude pro každý požadavek vygenerováno vlákno a v tuto chvíli se vytvoří objekt datového kontextu pro různé funkce, které se nakonec společně zavázají, aby se předešlo problémům s transakcemi. Samozřejmě, někteří lidé se mě mohou zeptat, jestli mohu vytvořit proměnnou, která by mohla použít stejný účel, ale tento objekt může také interagovat s dalšími daty vlákna, což je v rozporu s konceptem jedinečnosti vlákna.

Možnost 2

Scénář je založen na webových HTTP požadavcích, protože každý požadavek je nové vlákno a kód je následující:



Použití "CallContext" v .NET Core

Víme, že CallContext již není dostupný pro . NETStandard nebo .NET Core.

Ale můžete použít Asynclocal<T> k napodobení CallContext, stačí vytvořit následující statickou třídu:



Jmenné prostory, které je třeba odkazovat:



Je také snadno použitelný (zde jsem dal CallContext do knihovny Common):





Předchozí:ASP.NET MVC5 je vydán v předkompilovaném režimu, což zlepšuje rychlost načítání stránek a výkon
Další:[Otoč]. NET exportuje PPT jako obrázek
Zveřejněno 25.08.2020 23:38:22 |
Není to po infuzi vůně?
 Pronajímatel| Zveřejněno 26.08.2020 21:37:39 |
Cucumber Zveřejněno 25. 8. 2020 23:38
Není to po infuzi vůně?

Výchozí životní cyklus injekcí asp.net jádra nesplňuje mé potřeby

Instance služeb vytvořené objektem Singleton: IServiceProvider jsou uloženy na objektu IServiceProvider jako kořenový kontejner, takže více objektů IServiceProvider se stejným kořenem pro stejný typ instancí služeb je na stejném objektu.
Instance služeb vytvořené objektem Scoped:IServiceProvider jsou ukládány samostatně, takže instance služeb stejného typu, které poskytuje stejný objekt IServiceProvider, jsou všechny stejný objekt.
Přechodné: Pro každý požadavek na poskytování služby objekt IServiceProvider vždy vytvoří novou instanci služby.
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com