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