C# ';System.Data.IDbConnection';至';System.Data.SqlClient.SqlConnection';

C# ';System.Data.IDbConnection';至';System.Data.SqlClient.SqlConnection';,c#,.net,C#,.net,我在尝试编译上述代码时遇到以下错误 无法将类型“System.Data.IDbConnection”隐式转换为 “System.Data.SqlClient.SqlConnection”。存在显式转换 (你错过了演员阵容吗?) 错误消息是不言自明的。您的方法采用IDBTransaction,它的Connection属性返回IDBConnection,这是所有连接类型都实现的接口,而不仅仅是SqlConnection 您可以将其强制转换为SqlConnection,但如果有人试图将您的方法用于不同

我在尝试编译上述代码时遇到以下错误

无法将类型“System.Data.IDbConnection”隐式转换为 “System.Data.SqlClient.SqlConnection”。存在显式转换 (你错过了演员阵容吗?)


错误消息是不言自明的。您的方法采用
IDBTransaction
,它的
Connection
属性返回
IDBConnection
,这是所有连接类型都实现的接口,而不仅仅是
SqlConnection

您可以将其强制转换为
SqlConnection
,但如果有人试图将您的方法用于不同的事务类型,则很容易出错,因为这会导致运行时异常

但是您可以使用
Connection.CreateCommand

protected override IDbCommand GetDbCommand(string key, IDbTransaction transaction)
{
    if (transaction == null)
    {
        return base.GetDbCommand(key);
    }
    return new SqlCommand { Connection = transaction.Connection, Transaction = transaction };
}
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;
}