C# & EF: bulkinsert 相关对象

C# & EF: bulkinsert related objects

我目前正在玩 EntityFramework.BulkInsert

虽然它确实有助于提高简单插入的性能(16 秒,1.000.000 行),但我找不到有关插入映射到多个表的对象的任何信息。唯一与此相关的是官方网站上的旧(2014)主题,说明这是不可能的。这还是真实的吗?

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

EntityFramework.BulkInsert是一个很好的库,支持简单的场景。然而,图书馆是有限的,不再支持。

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

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

此库支持所有内容,包括所有关联和继承。

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

// Easy to use
context.BulkSaveChanges();

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

图书馆不仅可以插入,还可以做更多的事情。它支持所有批量操作:

  • 批量插入
  • 批量更新
  • 批量删除
  • 批量合并

但是与 EntityFramework.BulkInsert 不同的是,这个库不是免费的。

编辑:回答子问题

You say way faster - do you have any metrics or a link to metrics

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

然而,指标存在严重偏差。太多的东西可能会影响它,比如索引、触发器、延迟等!

人们通常报告我们的性能提高了 25 倍、50 倍、80 倍!

人们在执行基准测试时通常会忘记的一件事是在测试 JIT 编译之前调用我们的库一次!像Entity Framework,第一次命中库可能需要好几个ms。

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

如果我要移动大量数据(imports/exports/transformations 等),那么我会更直接地使用 SQL,这样我就有更多的控制权。