c# - Entity Framework 6 的插入顺序由什么逻辑决定

标签 c# entity-framework entity-framework-6 entity-framework-core

所以,我有一个 DBContext,我正在执行以下操作:

dbContext.SomeTables1.Add(object1)
dbContext.SomeTables2.AddRange(objectArray2)
dbContext.SomeTables3.AddRange(objectArray3)
dbContext.SaveChanges();

EF 不会按此顺序插入数据库记录,它会按随机顺序插入它们。要以相同的顺序插入它们,我必须在每次添加后执行 dbContext.SaveChanges()。这不是一个有效的解决方案,就我而言,完成所有插入需要 10 秒,而一次保存的随机顺序大约需要 3 秒。

注意我需要正确的顺序来解决死锁问题。

我的问题是:

  • Is this issue resolved in EF7?
  • I can profile EF and determine the random order, however, is there a guarantee that it will be consistently with the same random order or does it change between requests? (I can adopt my other code if the answer to this question is positive).
  • Is there a better way of maintaining the order than dbContext.SaveChanges() on every addition?

最佳答案

  • 无法在 EF6 或 EF Core(最初命名为 EF7)中指定保存顺序。
  • 此问题未在 EF Core(最初命名为 EF7)中解决,因为这不是问题。
  • 如果前任相同,则顺序将相同(这种情况很少发生)

当您调用 SaveChanges 时,所有实体都按照“ProduceDynamicCommands”方法中的内部顺序进行排序,然后通过“TryTopologicalSort”方法再次排序,该方法循环添加没有前任的命令(如果您添加 A 和 B,A 取决于在 B 上,那么 B 将被插入到 A 之前)

留给你批量添加插入。

由于执行插入需要 3 秒,我假设您有数千个实体并且执行批量插入可能会提高您的性能,将 10 秒减少到更少,然后可能是最初的 3 秒!

这里有 2 个我可以推荐的库:

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

关于c# - Entity Framework 6 的插入顺序由什么逻辑决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795577/

相关文章:

c# - Entity Framework 6 和 SQL Server 序列

c# - 流阅读器无法将文本从文件文本获取到文本框

c# - 如何在 C# 中打印多页

c# - Entity Framework - 存储过程的执行时间极长

c# - Entity Framework 不可为空的列映射到可为空的实体属性

c# - Entity Framework 添加自定义方法

c# - 在自定义 Html Helper 中获取 Action 的 MvcHtmlString

c# - 使用C#的多线程实践和方法

c# - 使用 Entity Framework dbset 获取所有行

entity-framework - 在一次事务中调用多个服务方法