我正在尝试在DbContext下使用SqlBulkCopy。我的Sql连接字符串具有UserId和Password,这就是将连接对象传递给SqlBulkCopy的原因我正在创建具有SqlCredential的SqlConnection对象并将SqlConnection对象传递给SqlBulkCopy。我的SqlBulkCopy初始化如下所示。
using (var conn = new SqlConnection("", cred))
{
using (var bulkCopy = new SqlBulkCopy("",SqlBulkCopyOptions.CheckConstraints |
SqlBulkCopyOptions.KeepNulls,DbContext.Database.CurrentTransaction))
{
// bulkCopy code
}
}
但问题是构造函数的第三个参数应该是SqlTransaction。在我的情况下,我已经拥有了我的服务交易的DbContext。
如何将DbContextTransaction(DbContext.Database.CurrentTransaction)转换为SqlTransaction。
答案 0 :(得分:10)
您需要dbContext或IDbTransaction的实例来获取UnderlyingTransaction:
<强>的DbContext:强>
var bulkCopy = new SqlBulkCopy("", SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.KeepNulls,
(myDbContext.Database.CurrentTransaction.UnderlyingTransaction) as SqlTransaction)) ;
<强> IDbTransaction:强>
using (IDbTransaction tran = conn.BeginTransaction())
{
var bulkCopy = new SqlBulkCopy("", SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.KeepNulls, tran as SqlTransaction);
}
SqlTransaction继承自DbTransaction!
注意:
默认情况下,批量复制操作作为独立操作执行。批量复制操作以非交易方式发生,没有 回滚的机会。如果在发生错误时需要回滚全部或部分批量复制,则可以使用SqlBulkCopy管理的事务,在现有事务中执行批量复制操作(如在DbContext示例中并将其作为参数传递为可选) ,或者在IDbTransaction的示例中登记在Transaction中。
答案 1 :(得分:4)
public void smoothScrollToPosition(RecyclerView recyclerView, State state, int position) {
Log.e(TAG, "You must override smoothScrollToPosition to support smooth scrolling");
}