Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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, являются одним и тем же объектом.
Transient: Для каждого запроса на предоставление услуг объект IServiceProvider всегда создаёт новый экземпляр сервиса.
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com