Явное закрытие требуется? - PullRequest
0 голосов
/ 09 августа 2009

Я использую EntLib 4.1.

_db = DatabaseFactory.CreateDatabase("DbName");
DbCommand dbCommand = _db.GetStoredProcCommand("someProcedure");
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
result = _db.ExecuteNonQuery(dbCommand);

После выполнения задачи мне нужно удалить объект _db, например:

finally
{
    _db = null;
}

... или EntLib Framework будет обрабатывать это автоматически?

Ответы [ 3 ]

3 голосов
/ 17 августа 2010

Я знаю, что это древняя история, но я не могу оставить эти ответы.

Вы не должны располагать экземплярами базы данных. Он даже не реализует IDisposable.

Вам нужно необходимо избавиться от созданных вами явных объектов DbCommand.

2 голосов
/ 09 августа 2009

выполнение _db = null НЕ удаляет объект.

Вы должны выполнить _db.Dispose () или использовать блок using.

Сборка мусора удалит объект в недетерминированное время, но как только вы создадите объект, реализующий IDisposable, вы должны ОБЯЗАТЕЛЬНО вызывать Dispose () (если, конечно, вы не передадите его объекту). или другая функция, которая обещает это сделать).

В этом случае легко увидеть, что у фабрики нет способа узнать, когда вы закончили с объектом, поэтому вы должны утилизировать его самостоятельно.

0 голосов
/ 09 августа 2009

Сборщик мусора удалит объект, когда он выйдет из области видимости. Таким образом, ваш код будет работать, но это не лучшее решение.

Было бы лучше поместить создание объекта базы данных в оператор using.

...