什么逻辑确定实体框架6的插入顺序

Ada*_*dam 14 c# entity-framework entity-framework-6 entity-framework-core

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

dbContext.SomeTables1.Add(object1)
dbContext.SomeTables2.AddRange(objectArray2)
dbContext.SomeTables3.AddRange(objectArray3)
dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

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

NB我需要正确的命令来解决死锁问题.

我的问题是:

  • 这个问题在EF7中解决了吗?
  • 我可以对EF进行概要分析并确定随机顺序,但是,是否可以保证它与相同的随机顺序保持一致,还是在请求之间进行更改?(如果这个问题的答案是肯定的,我可以采用我的其他代码).
  • 维持订单是否有比dbContext.SaveChanges()每次添加更好的方法?

Jon*_*nan 9

  • 您无法在EF6或EF7中指定保存订单.
  • EF7中没有解决该问题,因为这不是问题.
  • 如果前任是相同的(可能很少发生),顺序将是相同的

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

您可以通过批量添加进行插入.

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

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

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