MaY*_*YaN 4 .net c# sqlconnection ormlite-servicestack
我正在尝试使用SqlBulkCopy并ServiceStack 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始终为空,有什么想法吗?
因为连接被包装在一个托管的OrmLiteConnectionWrapper 中,你可以通过以下方式获得 SqlConnection:
var adoNetConn = ((IHasDbConnection)dbConn).DbConnection;
var sqlConnection = adoNetConn as SqlConnection;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |