2
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”。存在显式转换(您是否缺少演员表?)

4

1 回答 1

7

错误消息是不言自明的。您的方法需要一个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;
}
于 2013-07-16T21:28:09.840 回答