我目前正在玩EntityFramework.BulkInsert
。
虽然它确实有助于简单插入(16秒,1.000.000行)的性能,但我无法找到有关插入映射到多个表的对象的任何信息。与此相关的唯一事情是来自官方网站的旧(2014)主题,声明它不可能。这仍然是实际的吗?
如果是这样的话,有什么好的解决方法吗?
答案 0 :(得分:1)
EntityFramework.BulkInsert是一个非常好的库,支持简单的场景。但是,该库是有限的,不再受支持。
到目前为止,只有一个很好的解决方法,它使用的是支持所有内容的库!
免责声明:我是该项目的所有者Entity Framework Extensions
这个库支持所有关联和继承。
例如,为了在不同的表中保存多个实体,您可以使用 BulkSaveChanges ,其工作方式与SaveChanges完全相同,但更快!
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);
该库不仅仅是插入。它支持所有批量操作:
然而,与EntityFramework.BulkInsert不同,此库不是免费的。
编辑:回答子问题
您说得更快 - 您是否有任何指标或指标链接
@Mark:您可以在我们的网站homepage上查看指标。我们报告BulkSaveChanges比SaveChanges快至少15倍。
然而,度量标准存在严重偏差。太多事情可能会影响它,如索引,触发器,延迟等!
人们通常会将我们的表现提高25倍,50倍,80倍!
人们在执行基准测试时通常会忘记的一件事是在测试JIT编译之前调用我们的库一次!与实体框架一样,第一次访问库可能需要几毫秒。
答案 1 :(得分:1)
如果我遇到批量插入问题,我就不会使用EF。 EF用于在应用程序的正常使用情况下映射表示实体的对象,其中任何给定的事务应该只触及一个实体(假设您的实体是围绕合理的一致性边界设计的)。
如果我正在移动大量数据(导入/导出/转换等),那么我会更直接地使用SQL,在那里我有更多的控制权。