为什么我无法将 ServiceStack Ormlite 连接转换为 SqlConnection?

MaY*_*YaN 4 .net c# sqlconnection ormlite-servicestack

我正在尝试使用SqlBulkCopyServiceStack Ormlite编写了以下扩展方法:

public static void BulkInsertSqlServer<T>(this IDbConnection dbConn, string targetTable, IEnumerable<T> data, params string[] columns)
{
  Ensure.NotNull(dbConn);
  Ensure.That(dbConn.State == ConnectionState.Open);
  Ensure.NotNullOrEmptyOrWhiteSpace(targetTable);
  Ensure.NotNull(data);
  Ensure.NotNullOrEmpty(columns);

  var sqlConnection = dbConn as SqlConnection;

  using (var bcp = new SqlBulkCopy(sqlConnection))
  using (var reader = ObjectReader.Create(data, columns))
  {
      bcp.BatchSize = data.Count();
      bcp.DestinationTableName = targetTable;
      bcp.WriteToServer(reader);
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用的:

_connFactory = new OrmLiteConnectionFactory(connStr, SqlServerOrmLiteDialectProvider.Instance);

using (var db = _connFactory.Open())
using (var tran = db.BeginTransaction())
{
    db.BulkInsertSqlServer("User", users, "Name", "Age");

    var allRoles = new List<Role>();

    foreach (var listOfRoles in users.Select(d => d.Roles))
    {
        allRoles.AddRange(listOfRoles);
    }

    db.BulkInsertSqlServer("Role", allRoles, "Name", "UserId", "IsAdmin");

    tran.Commit();
}
Run Code Online (Sandbox Code Playgroud)

sqlConnection始终为空,有什么想法吗?

myt*_*thz 6

因为连接被包装在一个托管的OrmLiteConnectionWrapper 中,你可以通过以下方式获得 SqlConnection:

var adoNetConn = ((IHasDbConnection)dbConn).DbConnection;    
var sqlConnection = adoNetConn as SqlConnection;
Run Code Online (Sandbox Code Playgroud)