Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 27156|Отговор: 2

[Източник] EF DbContext гарантира, че контекстът е уникален

[Копирай линк]
Публикувано в 22.08.2020 г. 10:21:31 ч. | | |
Използвайки EF за манипулиране на базата данни, извличане на DbContext (клас контекст на операция на база данни) в същата HTTP заявка за осигуряване на уникалност, статията използва две схеми за осигуряване на уникалността на контекста на Entity Framework, а решението на платформата .NET Core се прикачва.

Опция 1

Ако даден обект е гарантирано глобално уникален, определено ще се сетите за класически модел на дизайн: сингълтон режим, ако обектът, който ще се използва, трябва да е уникален в нишката?

Слот за данни: CallContext, добре, вижте обяснението на msdn за съдържанието на обаждания.

CallContext е специализиран обект за колекция, подобен на локален ниток за извиквания на методи, и предоставя слот за данни, уникален за всяка нишка за логическо изпълнение. Слотовете за данни не се споделят между контекстите на повиквания в други логически нишки. Обекти могат да се добавят към CallContext, когато той се разпространява напред-назад по пътя на изпълнителния код и се инспектира от отделни обекти в този път.

Тоест, текущата нишка съхранява обекта в локалното хранилище на нишката, а обектът се унищожава, когато нишката се унищожава.

Използвайте код:



Сценарии на използване: Лично аз мисля, че се използва, когато обектът трябва да се използва глобално в рамките на нишката, а другите нишки от разширения на пакета не могат да го достъпят. Например, в контекста на данни на EF, за всяка заявка се генерира нишка и в този момент се създава обект с контекст на данни за различни функции, които могат да се използват, и накрая ще се комитират заедно, за да се избегнат проблеми с транзакциите. Разбира се, някои хора може да ме попитат дали мога да създам променлива, която да използвам, която също може да постигне същата цел, разбира се, но този обект може да взаимодейства и с други данни от нишки, което противоречи на концепцията за уникалност в нишката.

Опция 2

Сценарият се базира на уеб http заявки, защото всяка заявка е нова нишка, а кодът е следният:



Използване на "CallContext" в .NET Core

Знаем, че CallContext вече не е наличен за . NETStandard или .NET Core.

Но можеш да използваш<T> Asynclocal, за да имитираш CallContext, просто създай следния статичен клас:



Пространства от имена, които трябва да бъдат реферирани:



Също така е лесен за използване (тук сложих CallContext в Common библиотеката):





Предишен:ASP.NET MVC5 се пуска в предварително компилиран режим, което подобрява скоростта на зареждане и производителността на страницата
Следващ:[Завърти]. NET експортира PPT като картина
Публикувано в 25.08.2020 г. 23:38:22 ч. |
Не е ли ароматно от инфузията?
 Хазяин| Публикувано в 26.08.2020 г. 21:37:39 ч. |
Cucumber Публикувано на 25.08.2020 23:38
Не е ли ароматно от инфузията?

Жизненият цикъл на инжекция по подразбиране на ядрото asp.net не отговаря на моите нужди

Инстанциите на услугите, създадени от обекта Singleton: IServiceProvider, се съхраняват в обекта IServiceProvider като коренов контейнер, така че няколко IServiceProvider обекта с един и същ корен за един и същ тип инстанции на услуги са всички върху един и същ обект.
Инстанциите на услуги, създадени от обекта Scoped:IServiceProvider, се запазват сами, така че екземплярите на услуги от същия тип, предоставени от същия IServiceProvider обект, са всички един и същ обект.
Временен: За всяка заявка за предоставяне на услуга, обектът IServiceProvider винаги създава нова инстанция на услуга.
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com