架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
Просмотров:15019|Ответов: 2
打印 上一主题 下一主题

[INFOGRAPHIC]EF DbContext гарантирует уникальность контекста

[Скопировать ссылку].
Подъемник прямо к 跳转到指定楼层
владелец
发表于 2020-8-22 10:21:31|只看该作者回帖奖励|Реверсивныйпросмотр|Режим чтения
Используя EF для работы с базой данных, DbContext (класс контекста работы с базой данных) будет извлекаться в том же HTTP-запросе, чтобы обеспечить уникальность, в статье используются два варианта обеспечения уникальности контекста Entity Framework, к тому же привязанного к решению на платформе .NET Core.

Вариант 1

Если объект гарантированно глобально уникален, мы, конечно, вспомним классический паттерн проектирования: паттерн синглтон, если вы хотите использовать объект, который должен быть уникальным в пределах потока?

Слот данных: CallContext, посмотрите на объяснение callcontent в msdn.

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

То есть текущий поток сохраняет объект в локальном хранилище потока, и объект уничтожается при уничтожении потока.

Используйте код:



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

Вариант 2

Основываясь на сценарии веб-запроса http, поскольку каждый запрос, является новым потоком, код выглядит следующим образом:



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

Мы знаем, что CallContext больше не доступен для .NETStandard и .NET Core.

Но можно использовать Asynclocal<T> для имитации CallContext, просто создав следующий статический класс:



Пространство имен, на которое нужно ссылаться:



Это также легко использовать (здесь я поместил CallContext в библиотеку классов Common):





Previous: ASP.NET MVC5 с использованием режима предварительной компиляции, улучшает скорость загрузки страниц и производительность
Next: [Отчет].NET будет экспортировать PPT как картинку
收藏转播分享Коллекция передачиTaobao
C#/.NET использует SequenceEqual для сравнения двух наборов коллекций, опубликовано только в процессе практики, возникли технические трудности, не вводите в заблуждение других.
диван
Опубликовано 2020-8-25 23:38:22|Only View Author
Использование инъекций не пахнет хорошо?
Код фермерской сети, публикуется только в процессе практики, возникли технические трудности, не вводите в заблуждение других.
сапоги угги продажа
трикотаж
楼主|发表于 2020-8-26 21:37:39|只看该作者
Огурец Опубликовано 2020-8-25 23:38
Я не думаю, что это хорошая идея использовать инъекции.

Жизненный цикл инъекций по умолчанию в asp.net core не делает того, что мне нужно.

Singleton: экземпляр сервиса, созданный объектом IServiceProvider, сохраняется на объекте IServiceProvider в качестве корневого контейнера, поэтому несколько объектов IServiceProvider с одним и тем же корнем, предоставляющих экземпляры сервиса для одного и того же типа, являются одним и тем же объектом.
Scoped: экземпляры услуг, созданные объектом IServiceProvider, сохраняются сами по себе, поэтому экземпляры услуг, предоставляемые одним и тем же объектом IServiceProvider для одного и того же типа, являются одним и тем же объектом.
Переходный: для каждого запроса на предоставление услуги объект IServiceProvider всегда создает новый экземпляр услуги.
Код фермерской сети, публикуется только в процессе практики, возникли технические трудности, не вводите в заблуждение других.
Ответить ЗаПротив

Отчет

Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


DISCLAIMER: Все программное обеспечение, материалы по программированию или статьи, опубликованные Code Farmer, предназначены только для использования в учебных и исследовательских целях; вышеуказанное содержимое не должно использоваться в коммерческих или незаконных целях, в противном случае все последствия будут возложены на самих пользователей. Это сайт информации из сети, спор об авторских правах не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое со своего компьютера в течение 24 часов после загрузки. Если вам понравилась программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшее подлинное обслуживание. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 23:17

Быстрый ответНазад к началуНазад к списку