【问题标题】:Saving a large graph with Entity Framework 5使用 Entity Framework 5 保存大图
【发布时间】:2013-06-24 16:11:54
【问题描述】:

我知道不建议使用实体框架进行批量插入,因为它会一一添加它们。 (Example 1, example 2.)

如何附加一个在其下方具有大图的对象,例如100Ks 的物体? - 具体来说:

  • 使用 EF5 执行此操作有哪些(时间/内存)性能注意事项?
  • 有存储大图的最佳做法吗?
  • 关系数据库是存储大型图表的好主意吗?

一点背景:

  • 图表是使用 EF5 POCO 创建的,然后附加到根并保存。图表始终是新数据,从不更新。我们使用的数据库是 SQL Server 2012。

  • 对于大型案例(100Ks 对象),实际创建过程可能需要数十秒,因此如果附加/保存过程占用 10% 的时间,则不会对整体时间产生显着影响性能。

【问题讨论】:

  • 不一定要逐个添加实体。在我的实践中,我将我的对象图划分为独立的(几乎)部分并逐步加载它以保持完整性,而不是得到OutOfMemoryException 或只是几个小时的无望等待。
  • @Fyodor 我没有收到内存不足异常,也没有花费几个小时。
  • 那么你很幸运,你的图表比我的更方便。

标签: entity-framework entity-framework-5


【解决方案1】:

由于某种原因没有人回答,即使是这里众所周知的EF专家,那我就试着问一下。

最近,我处理了具有大量循环引用和实体之间关系数量的复杂模型。还有大量的数据,是的,和你的一样或者更大。我尝试了很多东西,但没有一个对我来说很方便,所以我最终使用了Fastest Way of Inserting in Entity Framework。一年前它帮助了我很多,而你在你的问题帖子中没有提到它。


但是,如果您在实体之间没有太多复杂的关系,并且只需一次插入大量全新数据,那么您已经拥有mentioned 的最快方法是SqlBulkCopy,因为它非常快速且在这种情况下很简单。
例如,使用 CodeFirst 方法,您可以先创建数据库结构,然后简单地插入数据。

希望对您有所帮助! 无法猜测在您的情况下使用 NoSQL 存储是否会快速或方便,因为我从未使用过这些解决方案。 可能有经验的同事会补充一些。

【讨论】:

  • 所以一个操作中添加的实体越多越快,只要该操作不占用太多内存即可。按对象类型划分并使用SqlBulkCopy插入该类型的所有对象是最快的吗?
  • 是的,这是最快的方法。插入所有这些条目只需几秒钟。
猜你喜欢
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多