Entity Framework 6.0 DBContex автоматически закрывается? - PullRequest
0 голосов
/ 27 сентября 2019

Соединение DBcontext закрывается автоматически?Я использовал EF6 и нет открытого или закрытого соединения, которое из-за контекста связывается со строкой соединения в конфигурационном файле.Хранимые процедуры EF подключены и могут выполнять транзакции.

Проект Asp.net

{... return DBContext.ValidUserName (userName) .SingleOrDefault ();}

Хотите уточнить, закрывается ли соединение автоматически или нужно делать это вручную?Является ли это причиной превышения пула в IIS.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Из документов :

По умолчанию контекст управляет подключениями к базе данных.Контекст открывает и закрывает соединения по мере необходимости.
Например, контекст открывает соединение для выполнения запроса, а затем закрывает соединение после обработки всех наборов результатов.

Когда выЕсли вы используете DbContext в веб-приложении, вам также следует рассмотреть раздел Время жизни: https://docs.microsoft.com/en-us/ef/ef6/fundamentals/working-with-dbcontext#lifetime

Вот некоторые общие рекомендации при выборе времени жизни контекста:

  • При работе с веб-приложениями используйте экземпляр контекста для каждого запроса.
  • При работе с Windows Presentation Foundation (WPF) или Windows Forms используйте экземпляр контекста для каждой формы.Это позволяет использовать функции отслеживания изменений, которые предоставляет контекст.
  • Если экземпляр контекста создается контейнером внедрения зависимостей, контейнер обычно отвечает за удаление контекста.
  • Есликонтекст создается в коде приложения, не забывайте избавляться от контекста, когда он больше не требуется.
  • При работе с длительным контекстом учитывайте следующее:
    • Поскольку вы загружаете больше объектов иих ссылки в памяти, потребление памяти контекста может быстро возрасти.Это может вызвать проблемы с производительностью.
    • Контекст не является потокобезопасным, поэтому его не следует совместно использовать нескольким потокам, одновременно выполняющим над ним работу.
    • Если исключение приводит к тому, что контекст находится всостояние, которое невозможно восстановить, может завершить работу всего приложения.
    • Вероятность возникновения проблем, связанных с параллелизмом, возрастает по мере увеличения разрыва между временем запроса и обновления данных.
0 голосов
/ 27 сентября 2019

Это зависит от того, как вы его используете, и вы не предоставили много информации в своем вопросе.Но короткий ответ заключается в том, что Entity Framework управляет соединениями за вас, и вам, как правило, не нужно беспокоиться об открытии или закрытии соединений вручную.

Из документации Microsoft:

Object Servicesпредоставляет EntityConnection с помощью свойства Connection .Это позволяет вам управлять соединением и транзакциями или предоставлять собственную EntityConnection .Это полезно, когда вы хотите держать открытым соединение в недолговечном объектном контексте, чтобы повысить производительность или явно контролировать транзакции.То же соединение провайдера, которое используется Entity Framework, может использоваться совместно с другими частями приложения.

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

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

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

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

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

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

...