c# - 实体框架扩展 bulkinsert 忽略设置超时
问题描述
我们正在尝试使用实体框架批量插入将一个大型数据集(2+ 百万条记录)插入我们的数据库。
扩展是EntityFramework.BulkInsert.Extensions
(nuget EntityFramework.BulkInsert-ef6
) 版本 6.0.2.8。
我们通过以下方式使用它:
using (StockEntities context = new StockEntities())
{
var entities = AutoMapper.Mapper.Map<List<ImportLots>>(lots).ToArray();
context.BulkInsert(entities, new BulkInsertOptions { TimeOut = 1800 });
context.SaveChanges();
}
但是,大约 1 分钟后,此超时。
所以,为了解决这个问题,我们添加了一个 batchsize
using (StockEntities context = new StockEntities())
{
var entities = AutoMapper.Mapper.Map<List<ImportLots>>(lots).ToArray();
context.BulkInsert(entities, new BulkInsertOptions { TimeOut = 1800, BatchSize = 100000 });
context.SaveChanges();
}
但是,没有骰子。好像BulkInsertOptions
被忽略了。有人遇到过这种情况么?解决此问题的最佳方法是什么?
编辑:添加以下只是为了测试,但是,仍然没有骰子。大约 1 分钟后仍然超时。
context.Database.CommandTimeout = 1800;
编辑:将代码转换为以下代码,这似乎有效,因此 BulkInsertOptions 似乎被忽略了
using (StockEntities context = new StockEntities())
{
context.Database.CommandTimeout = 1800;
var entities = AutoMapper.Mapper.Map<List<ImportLots>>(lots).ToArray();
int batches = entities.Count() / 100000;
for(int i = 0; i < batches; i++)
{
context.BulkInsert(entities.Skip(i * 100000).Take(100000), new BulkInsertOptions { TimeOut = 1800});
context.SaveChanges();
}
}
解决方案
推荐阅读
- python - 将 Keras 与 Ensemble Voting 分类器一起使用
- python - 不是 python 3 和 pandas 的 NaN 条件语句
- wolfram-mathematica - 以自定义格式打印 Solve 的输出
- sql - 如何连接 2 个独立的表
- r - 以分层方式组合多个数据帧
- html - 容器上的图像大小
- python - Apache Airflow\ DAG 的不同需求.txt
- c# - VS 安装程序项目没有拉入所有 system.io.compression
- html - 如果每次都收到提交错误,则无法提交我在 MTurk 中创建的 HIT
- javascript - 来自多个位置的 jQuery $('element').one() 事件调用