pra*_*yay 7 c# entity-framework
我试图在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
}
}
Run Code Online (Sandbox Code Playgroud)
但这里的问题是构造函数的第三个参数应该是SqlTransaction.在我的情况下,我已经有了我的DbContext,它与我的服务交易一起登记.
如何将DbContextTransaction(DbContext.Database.CurrentTransaction)转换为SqlTransaction.
Bas*_*ili 12
您需要dbContext或IDbTransaction的实例来获取UnderlyingTransaction:
的DbContext:
var bulkCopy = new SqlBulkCopy("", SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.KeepNulls,
(myDbContext.Database.CurrentTransaction.UnderlyingTransaction) as SqlTransaction)) ;
Run Code Online (Sandbox Code Playgroud)
IDbTransaction:
using (IDbTransaction tran = conn.BeginTransaction())
{
var bulkCopy = new SqlBulkCopy("", SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.KeepNulls, tran as SqlTransaction);
}
Run Code Online (Sandbox Code Playgroud)
SqlTransaction继承自DbTransaction!
注意:
默认情况下,批量复制操作作为隔离操作执行.在非发生的批量复制操作交易的方式,以不为契机回滚.如果在发生错误时需要回滚全部或部分批量复制,则可以使用SqlBulkCopy管理的事务,在现有事务中执行批量复制操作(如在DbContext示例中并将其作为参数传递为可选) ,或者在IDbTransaction的示例中登记在Transaction中.
| 归档时间: |
|
| 查看次数: |
4353 次 |
| 最近记录: |