Я действительно проверил эту вещь для ADO.net и EF v.6 и наблюдал за соединениями в таблице SQL
select * from sys.dm_exec_connections
Методы, которые нужно протестировать, выглядели так:
1) ADO.net с использованием
using(var Connection = new SqlConnection(conString))
{
using (var command = new SqlCommand(queryString, Connection))
{
Connection.Open();
command.ExecuteNonQueryReader();
throw new Exception() // Connections were closed after unit-test had been
//finished. Expected behaviour
}
}
2) ADO.net без использования
var Connection = new SqlConnection(conString);
using (var command = new SqlCommand(queryString, Connection))
{
Connection.Open();
command.ExecuteNonQueryReader();
throw new Exception() // Connections were NOT closed after unit-test had been finished
finished. I closed them manually via SQL. Expected behaviour
}
1) EF с использованием.
using (var ctx = new TestDBContext())
{
ctx.Items.Add(item);
ctx.SaveChanges();
throw new Exception() // Connections were closed, as expected.
}
2) EF без использования
var ctx = new TestDBContext();
ctx.Items.Add(item);
ctx.SaveChanges();
throw new Exception() // Connections WERE successfully closed, as NOT expected.
Я не знаю, почему это так, но EF автоматически закрывает соединения. Также все шаблоны репозитория и UnitOfWork, которые используют EF, не используют using. Это очень странно для меня, потому что DBContext - это тип Disposable, но это факт.
Может быть, в Microsoft они сделали что-то новое для обработки?