Я создаю LINQ to SQL DataContext, передавая ему уже открытое соединение.Это работает, за исключением того, что я теперь пропускаю соединения повсюду, потому что, хотя я удаляю DataContext, когда я закончил, соединение никогда не закрывается.Я понимаю, что это сделано специально.
Я хотел бы убедиться, что мое соединение закрывается после удаления моего DataContext.
Я попытался переопределить Dispose для DataContext, вот так:
protected override void Dispose(bool disposing)
{
this.Connection.Close();
}
Однако это не работает ... Я получаю исключение ObjectDisposedException.Установка точки останова показывает, что на этом этапе все уже удалено!
Единственный найденный мной обходной путь - скрыть метод Dispose в DataContext.Вот так:
public new void Dispose()
{
this.Connection.Close();
base.Dispose();
}
Тем не менее, это немного неприятно пахнет кодом.Каков рекомендуемый способ продолжить здесь?
Полный пример кода (DataClasses1DataContext - пустой DataContext):
class Program
{
static void Main(string[] args)
{
string connectionString = "server=localhost;initial catalog=master;Integrated Security=SSPI;";
for (int i = 0; i < 100; i++)
{
var connection = new SqlConnection(connectionString);
connection.Open();
var ctx = new DataClasses1DataContext(connection);
ctx.ExecuteCommand("declare @i int");
ctx.Dispose();
}
Console.ReadKey();
}
}
public partial class DataClasses1DataContext
{
protected override void Dispose(bool disposing)
{
// This will throw an ObjectDisposedException
// this.Connection.Close();
}
public new void Dispose()
{
// This will work
// this.Connection.Close();
//base.Dispose();
}
}