c#将DbContextTransaction转换为SqlTransaction

我试图在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.

解决方法

您需要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("",tran as sqlTransaction);
}

sqlTransaction继承自DbTransaction!

注意:

认情况下,批量复制操作作为隔离操作执行.批量复制操作以非事务方式发生,没有机会将其回滚.如果在发生错误时需要回滚全部或部分批量复制,则可以使用sqlBulkcopy管理的事务,在现有事务中执行批量复制操作(如在DbContext示例中并将其作为参数传递为可选),或者在IDbTransaction的示例中登记在Transaction中.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...