2016-09-04 39 views
2

我目前在玩EntityFramework.BulkInsertC#&EF:bulkinsert相关对象

虽然它确实有助于简化插入操作(具有1.000.000行的16秒),但我找不到任何有关插入映射到多个表的映射对象的信息。与此相关的唯一事情是官方网站的旧版(2014年)话题,指出这是不可能的。这仍然是实际的吗?

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

+0

不幸的是....是的。一个alternatve将是批量插入扩展,并在同一事务中手动更新所有内容。 – ESG

回答

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,该库是不是免费的。

编辑:答案subquestion

你说的方法快 - 你有任何的指标或指标

@马克的链接:你可以看一下指标在我们的网站homepage。我们报告BulkSaveChanges至少比SaveChanges快15倍。

但是,度量标准存在很大偏差。太多的东西可能会影响它,如索引,触发器,延迟等!

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

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

+0

你说*方式更快* - 你有任何指标或指标的链接?只是好奇 –

1

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

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