Заставить ADO.NET (и EntityFramework) освободить базу данных - PullRequest
2 голосов
/ 20 сентября 2009

Я создаю и удаляю базы данных на лету для некоторых интеграционных тестов. Я делаю все управление базой данных на уровне ADO.NET. Для тестов я использую Entity Framework, потому что сущности - это часть того, что я тестирую. Проблема в том, что после того, как я это сделаю:

using (ProjectEntities db = new ProjectEntities(cs)) {
}

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

У меня фактически была такая же проблема на уровне ADO.NET, и я сделал следующее:

new SqlCommand("USE [master]", DatabaseConnection).ExecuteNonQuery();

но я не уверен, как выполнить что-то с таким же эффектом для соединения с Entity Framework. Я пытался вручную удалить объект db (хотя условие использования должно гарантировать это), и я также попытался вручную закрыть db.Connection. Ни то, ни другое не помогло. Если бы я мог запускать SQL напрямую без подключения к Entity Framework, я уверен, что смогу это сделать. Или, может быть, есть другой способ?

1 Ответ

5 голосов
/ 20 сентября 2009

Возможно, вам придется явно закрыть все соединения, я считаю, что соединение находится в пуле, и это одно из соединений в пуле, которое все еще поддерживает активное соединение с БД. Попробуйте использовать SqlConnection.ClearAllPools

Я написал в блоге об аналогичной проблеме в Контексте объектов Entity Framework - AWAITING COMMAND .

...