C#& EF:bulkinsert相关对象

时间:2016-09-04 19:59:43

标签: c# entity-framework ef-bulkinsert

我目前正在玩EntityFramework.BulkInsert

虽然它确实有助于简单插入(16秒,1.000.000行)的性能,但我无法找到有关插入映射到多个表的对象的任何信息。与此相关的唯一事情是来自官方网站的旧(2014)主题,声明它不可能。这仍然是实际的吗?

如果是这样的话,有什么好的解决方法吗?

2 个答案:

答案 0 :(得分:1)

EntityFramework.BulkInsert是一个非常好的库,支持简单的场景。但是,该库是有限的,不再受支持。

到目前为止,只有一个很好的解决方法,它使用的是支持所有内容的库!

免责声明:我是该项目的所有者Entity Framework Extensions

这个库支持所有关联和继承。

例如,为了在不同的表中保存多个实体,您可以使用 BulkSaveChanges ,其工作方式与SaveChanges完全相同,但更快!

// Easy to use
context.BulkSaveChanges();

// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);

该库不仅仅是插入。它支持所有批量操作:

  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

然而,与EntityFramework.BulkInsert不同,此库不是免费的。

编辑:回答子问题

  

您说得更快 - 您是否有任何指标或指标链接

@Mark:您可以在我们的网站homepage上查看指标。我们报告BulkSaveChanges比SaveChanges快至少15倍。

然而,度量标准存在严重偏差。太多事情可能会影响它,如索引,触发器,延迟等!

人们通常会将我们的表现提高25倍,50倍,80倍!

人们在执行基准测试时通常会忘记的一件事是在测试JIT编译之前调用我们的库一次!与实体框架一样,第一次访问库可能需要几毫秒。

答案 1 :(得分:1)

如果我遇到批量插入问题,我就不会使用EF。 EF用于在应用程序的正常使用情况下映射表示实体的对象,其中任何给定的事务应该只触及一个实体(假设您的实体是围绕合理的一致性边界设计的)。

如果我正在移动大量数据(导入/导出/转换等),那么我会更直接地使用SQL,在那里我有更多的控制权。