Подтвердить что ты не робот

Закрытие соединений явно в Entity Framework

Чтение документации по микрософт http://msdn.microsoft.com/en-us/library/bb738684.aspx Я вижу, что они открыто открывают и закрывают соединение

using (EntityConnection conn = new EntityConnection("name=AdventureWorksEntities"))
{ 
    conn.Open();
    ...
    conn.Close();
}

зачем это необходимо?

4b9b3361

Ответ 1

Это не обычный способ использования EF. EF обычно управляет соединением для вас. Однако:

Управление подключениями в службах объектов (Entity Framework)

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

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

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

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

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

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

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

Короче говоря, обычно вы не управляете соединением, но если вы хотите сделать это вручную по причинам, указанным выше, вы можете. Если вы решили открыть соединение вручную, вам нужно закрыть его вручную (EF не делает никаких предположений для вас, если вы решите пойти вручную).

Ответ 2

Это не обязательно, потому что Dispose, вызываемый с помощью оператора, будет обрабатывать его. Но хорошая привычка явно называть Close, как только вы знаете, что соединение больше не понадобится. Например, вы не знаете, насколько сложна утилизация, поэтому вы можете как можно скорее освободить соединение с базой данных, завернутое соединением с сущностью.