EntLib IDisposable преобразование - PullRequest
2 голосов
/ 10 августа 2009

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

Пока я выполняю код, используя:

using (  _db = DatabaseFactory.CreateDatabase("NLayerDB") )
{
     DbCommand dbCommand = _db.GetStoredProcCommand("someSPName");
     _db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
     result= _db.ExecuteNonQuery(dbCommand);
}

Я получаю следующую ошибку:

Тип

Microsoft.Practices.EnterpriseLibrary.Data.Database, используемый в операторе using, должен быть неявно преобразован в System.IDisposable

Какова точная проблема наличия здесь USING оператора?

Ответы [ 2 ]

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

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

Завершение вашего кода создания объекта в операторах «using» гарантирует, что созданный вами объект будет удален при выходе из блока «using». Это имеет смысл только для объекта, который реализует IDisposable, потому что другие типы не могут быть явно удалены.

Вы можете безопасно удалить свой блок использования и получить следующее:

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

Если DbCommand реализует IDisposable (я не уверен, что никогда не использовал DAAB EntLib), тогда вы можете захотеть обернуть только эту часть кода в блок using:

_db = DatabaseFactory.CreateDatabase("NLayerDB");
using (DbCommand dbCommand = _db.GetStoredProcCommand("someSPName"))
{
    _db.AddInParameter(dbCommand, "Id", DbType.Int32, id); 
    result = _db.ExecuteNonQuery(dbCommand); 
}
1 голос
/ 10 августа 2009

Microsoft.Practices.EnterpriseLibrary.Data.Database не реализует IDisposable , что является требованием для оператора using .

Объект DbCommand действительно реализует IDisposable, поэтому может быть более целесообразно использовать его вместо этого в операторе using.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...