Entity Frameworks и соединения с базой данных - PullRequest
1 голос
/ 18 декабря 2009

Я отлаживал Jaroslaw Kowalski упаковщики провайдера. Во время отладки я заметил, что Entity Framework закрывает соединение после каждого запроса. При каждом взаимодействии с базой данных в течение срока действия приложения открывается соединение с базой данных, а после выполнения запроса соединение закрывается

Мои вопросы:

  • Независимо от того, выполняет ли основной поставщик пул соединений по умолчанию.
  • Если я предоставлю свой собственный пул, как я узнаю, когда закрывать соединение. В данный момент я регистрируюсь в событии Thread.GetDomain (). ProcessExit и закрываю соединение при возникновении события. Этот подход хорош?

Меня беспокоит то, что Entity Framework сам закрывает соединение. Поэтому я не решаюсь объединить соединение, иначе это может вызвать проблемы в исключительных случаях.

Ответы [ 3 ]

4 голосов
/ 18 декабря 2009

FYI:

EF закрывает только те соединения, которые он открывает.

Так что если вы делаете что-то подобное вручную:

((ctx.Connection as EntityConnection).StoreConnection as SqlConnection).Open();

запросов последующих и SaveChanges() не должны закрывать это соединение.

Надеюсь, это поможет

Alex

2 голосов
/ 18 декабря 2009

пул соединений по умолчанию = 1 соединение. Так что не волнуйся.

Вся идея здесь в том, что у нас есть 1 модель программирования (отключена), и что конфигурация и настройка являются внешними.

0 голосов
/ 04 марта 2013

В .Net 4, чтобы цитировать: Управление подключениями и транзакциями

При управлении соединениями действуют следующие соображения:

Контекст объекта откроет соединение, если оно еще не открыто перед операцией. Если контекст объекта открывает соединение во время операции, он всегда закрывает соединение после завершения операции.

Если вы вручную откроете соединение, контекст объекта не закроет его. Вызов Close или Dispose закроет соединение.

Если контекст объекта создает соединение, соединение всегда будет удаляться при удалении контекста.

В долговременном контексте объекта вы должны убедиться, что контекст удаляется, когда он больше не требуется.

Если вы предоставляете открытый объект EntityConnection для контекста объекта, вы должны убедиться, что он расположен.

...