我目前正在使用EntityFramework.BulkInsert,这是在使用块和事务范围内包装的,以产生实体的批处理保存。例如:
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是否有依赖关系。我已经进行了一些测试,将最大池大小更改为各种较低和较高的数字,并在关闭MSDTC服务的情况下(目前全部在本地箱子上)使用10-100个并发用户运行负载测试。到目前为止,我无法使其抛出任何“需要打开MSDTC”的异常。我正在使用SQL2014、EF6.X和.NET 4.6、MVC 5。我理解,在这种情况下,SQL2014可能正在使用轻量级事务,我已经使用perfmon确认,如果在连接字符串中将Max Pool Size设置为X,则perf计数器NumberOfPooledConnections反映相同的数字X,当我将其更改为其他内容时,此计数器也会反映(至少按预期工作...)。其他信息-我正在使用集成安全性,并且在连接字符串中没有设置Enlist=...
批量插入包位于此处https://efbulkinsert.codeplex.com/,在幕后看起来是使用sqlBulkCopy。我担心即使我在测试中无法重现对MSDTC的依赖性,即使我没有明确在同一事务范围内打开2个连接,还是由于批处理的纯自然属性而存在MSDTC的依赖关系?
有人可以确认是否存在依赖关系吗?谢谢。