- сапоги угги распродажа
- 16373
|
Используя 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 как картинку
|