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,这样我就有更多的控制权。
我目前正在玩 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,这样我就有更多的控制权。