protected override IDbCommand GetDbCommand(string key, IDbTransaction transaction)
{
if (transaction == null)
{
return base.GetDbCommand(key);
}
return new SqlCommand { Connection = transaction.Connection, Transaction = transaction };
}
尝试压缩上述代码时出现以下错误。
无法隐式转换类型' System.Data.IDbConnection'至 ' System.Data.SqlClient.SqlConnection&#39 ;.存在显式转换 (你错过了演员吗?)
答案 0 :(得分:6)
错误信息是不言自明的。您的方法采用IDBTransaction
,它的Connection
属性返回IDBConnection
,这是所有连接类型实现的接口,而不仅仅是SqlConnection
。
您可以将其强制转换为SqlConnection
,但如果有人尝试将您的方法用于不同的事务类型,则会容易出错,因为这会导致运行时异常。
但您可以使用Connection.CreateCommand
:
protected override IDbCommand GetDbCommand(string key, IDbTransaction transaction)
{
if (transaction == null)
{
return base.GetDbCommand(key);
}
var cmd = transaction.Connection.CreateCommand();
cmd.Transaction = transaction;
return cmd;
}