Управление временем существования EntityConnection

.net asp.net c# entityconnection entity-framework

Вопрос

Было много вопросов по управлению временем жизни EntityContext ,

например, создание контекста в LINQ to Entities

Я пришел к выводу, что контекст сущности должен рассматриваться как единица работы и, следовательно, не использоваться повторно. Отлично.

Но, проводя некоторые исследования для ускорения доступа к моей базе данных, я наткнулся на этот пост ...

Улучшение производительности Entity Framework

В публикации утверждается, что низкая производительность EF по сравнению с другими платформами часто связана с тем, что объект EntityConnection создается каждый раз, когда требуется новый объект EntityContext .

Чтобы проверить это, я вручную создал статическое EntityConnection в Global.asax.cs Application_Start ().

Затем я преобразовал весь мой контекст с помощью операторов в

using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
   ....
}

Насколько я могу судить, это немного ускорило процесс без каких-либо ошибок.

Но безопасно ли это?

Представляет ли использование статического EntityConnection для всего приложения условия гонки?

С наилучшими пожеланиями, Кервин

Принятый ответ

Документально подтверждено, что EntityConnection не является поточно-ориентированным . Я думаю, что вы могли бы объединить их, но вы не можете использовать одно статическое соединение для веб-приложения, так как будет задействовано много потоков.


Популярные ответы

  • Если ваш EF-контекст относится ко всему Приложению, учтите, что пользователь A внес изменения (не зафиксировал), а пользователь B подтвердил свои изменения, все изменения будут зафиксированы в базе данных, поскольку оба пользователя A и B используют один и тот же экземпляр

  • В моем проекте я сделал каждый WebRequest-контекст EF-контекста - т.е. объект контекста является статическим от начала до конца веб-запроса, и все операции в этом запросе работают с одним и тем же контекстом EF. Это значительно ускорило мою обработку без упомянутой выше проблемы.

Одним из способов реализации этого является использование контейнера DI (я использую Unity) для управления временем жизни контекста EF. Менеджер времени жизни веб-запроса не предоставляется в Unity, но есть множество статей, показывающих, как это можно сделать.

НТН.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему