Нужно ли вставлять контекст Entity Framework в оператор Using?

c# entity-framework

Вопрос

Объект контекста Entity Framework реализует метод Dispose (), который «освобождает ресурсы, используемые контекстом объекта». Что это делает на самом деле? Может ли быть плохим всегда помещать это в оператор using {}? Я видел, как он используется как с, так и без использования оператора.

Я специально собираюсь использовать контекст EF из метода службы WCF, создать контекст, выполнить некоторое linq и вернуть ответ.

РЕДАКТИРОВАТЬ: Кажется, что я не единственный, кто задается этим вопросом. Другой вопрос - что на самом деле происходит внутри метода Dispose (). Некоторые говорят, что это закрывает связи, а некоторые статьи говорят, что нет. В чем дело?

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

Если вы создаете контекст, вы должны избавиться от него позже. Если вы должны использовать оператор using зависит от времени жизни контекста.

  1. Если вы создаете контекст в методе и используете его только внутри этого метода, вам действительно следует использовать оператор using поскольку он дает вам обработку исключений без какого-либо дополнительного кода.

  2. Если вы используете контекст в течение более длительного периода времени, т. Е. Время жизни не ограничено временем выполнения метода, вы не можете использовать оператор using и вам придется самостоятельно вызывать Dispose() и следить за тем, чтобы он всегда вызывался.

Что Dispose() делает для контекста объекта?

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


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

Для Progamming Entity Framework : «Вы можете явно утилизировать ObjectContext или подождать, пока сборщик мусора выполнит эту работу».

Короче говоря, хотя оператор using не обязателен, лучше всего, если вы знаете, что вы закончили с использованием ObjectContext, поскольку ресурс освобождается немедленно, а не в ожидании сбора мусора.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow