Управление временем существования EntityConnection - PullRequest
7 голосов
/ 04 апреля 2010

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

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

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

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

Повышение производительности Entity Framework

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

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

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

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

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

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

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

С уважением, Kervin

Ответы [ 2 ]

7 голосов
/ 05 апреля 2010

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

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

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

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

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...