c#将DbContextTransaction转换为SqlTransaction
发布时间:2020-12-15 06:39:35 所属栏目:百科 来源:网络整理
导读:我试图在DbContext下使用SqlBulkCopy.我的Sql连接字符串具有UserId和Password,这就是将连接对象传递给SqlBulkCopy的原因我正在创建具有SqlCredential的SqlConnection对象并将SqlConnection对象传递给SqlBulkCopy.我的SqlBulkCopy初始化如下所示. using (var
我试图在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中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读