首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EntityFramework.BulkInsert和MSDTC

EntityFramework.BulkInsert和MSDTC
EN

Stack Overflow用户
提问于 2016-11-22 09:25:40
回答 1查看 216关注 0票数 3

我目前正在使用EntityFramework.BulkInsert,它被包装在一个带有事务作用域的using块中,以生成实体的批量保存。例如:

代码语言:javascript
运行
复制
using(var tranScope = new TransactionScope())
{
    using(var context = new EFContext())
    {
        context.BulkInsert(entities, 100); // batching in size of 100
        context.Save();
    }
    tranScope.Complete();
}

我需要确定是否依赖于使用BulkInsert进行批量插入和MSDTC。我做了一些测试,将Max Pool Size更改为各种低值和高值,并在10-100个并发用户的情况下运行负载测试,同时关闭了MSDTC服务(目前都在本地机器上)。到目前为止,我不能让它抛出任何“需要打开MSDTC”类型的异常。我使用SQL2014,EF6.X和.net 4.6,MVC5。我知道在这种情况下,SQL2014可能使用轻量级事务,我已经使用perfmon确认,如果连接字符串中的最大池大小设置为X,则性能计数器NumberOfPooledConnections反映相同的数字X,并且当我将连接字符串中的它更改为其他值时,这也会反映在计数器中(因此,至少这是预期的工作...)。其他信息- Im正在使用集成安全性,并且尚未在Enlist=的连接字符串中设置任何内容...

bulk insert包位于这里的https://efbulkinsert.codeplex.com/,在幕后它看起来使用的是sqlBulkCopy。我担心的是,即使我不能在我的测试中重现对MSDTC的依赖,即使我没有显式地在同一事务范围内打开两个连接,但仅仅由于批处理的纯粹性质,仍然存在对MSDTC的依赖?

有没有人能确认是或不是,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 10:31:36

您使用的是一个轻量级事务,因此它不需要MS DTC。所有工作将由一台SQL Server机器处理。如果一台服务器启动了事务,然后另一台服务器完成了其余工作,则需要MS DTC。在您的情况下,它不是。下面是MSDN的一句话:

可提升事务是System.Transactions事务的一种特殊形式,它可以有效地将工作委托给简单的SQL Server事务。

如果需要一台以上的物理计算机来执行事务,则需要MS DTC。

你应该会好起来的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40732351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档