EntLib IDisposable转换

时间:2009-08-10 01:02:35

标签: enterprise-library

我正在使用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);
}

我收到以下错误:

using语句中使用的

Microsoft.Practices.EnterpriseLibrary.Data.Database类型必须可隐式转换为System.IDisposable

在此处使用 USING 语句的确切问题是什么?

2 个答案:

答案 0 :(得分:2)

你没有通过实际使用获得任何东西(正如你所说,它实际上不会编译)。

使用“语句”包装对象创建代码可确保在“using”块退出时处理您创建的对象。只有实现IDisposable的对象才有意义,因为其他类型无法显式处理。

您可以安全地删除您的使用区块并以此结束:

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

如果DbCommand实现了IDisposable(我不确定,从未使用过EntLib的DAAB),那么您可能希望将该部分代码包装在using块中:

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

答案 1 :(得分:1)

Microsoft.Practices.EnterpriseLibrary.Data.Database未实现IDisposable,这是using statement的要求。

DbCommand对象确实实现了IDisposable,因此在using语句中使用它可能更合适。