2013-02-27 6 views
0

Я захватываю базовое соединение от своего ObjectContext. Мне нужно проверить состояние соединения и при необходимости открыть его. Мне интересно, нужно ли мне закрыть его, или если об этом позаботятся обо мне.Entity Framework: Должен ли я закрыть соединение, если я его открою?

В любом случае я удаляю свой контекст, который, как я предполагаю, закрывает соединение.

Должен ли я открывать это соединение вручную в первую очередь?

FYI: Я намеренно избегаю удобства ExecuteStoredCommand и ExecuteStoredQuery. У нас есть более старый код, который работает против старых классов ADO.NET. Я просто хочу разоблачить соединение и убедиться, что он готов к использованию.

ответ

1

Entity Framework управляет открытием и закрытием соединений. Обычно он закрывает соединение, когда он завершает команду. Поэтому перед использованием соединения вам нужно будет проверить состояние подключения и открыть его, когда он будет закрыт. И вы можете закрыть его (а не распоряжаться им!), Когда закончите.

Когда контекст расположен, соединение всегда закрыто.

Возможно, вам придется приложить свой код в TransactionScope, если вы хотите, чтобы ваш старый код и Entity Framework выполнялись в одной транзакции.

+0

Я не знал, приведет ли к открытию и закрытию соединение воздействие производительности. Открывает ли Entity Framework и закрывает соединение для каждой выполняемой команды? –

+0

Насколько я знаю, да. Но пул соединений управляет реальным подключением к базе данных, поэтому во многих случаях реальное соединение может быть даже не закрыто. См. [этот пост] (http://stackoverflow.com/q/861552/861716). –

+0

Я создал простой класс менеджера соединений, реализующий 'IDisposable'. –

0

Я думаю, что если вы разместите контекст, он закроет соединение для вас. И если вы создадите новый объект ObjectContext, соединение также будет открыто.