什麼邏輯確定實體框架6的插入順序


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

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

EF不按此順序插入db記錄,它以隨機順序插入它們。要以相同的順序插入它們,我必須在每次添加後執行dbContext.SaveChanges() 。這不是一個有效的解決方案,在我的情況下,我需要10秒鐘來完成所有插入,而一次保存的隨機順序大約需要3秒。

NB我需要正確的命令來解決死鎖問題。

我的問題是:

  • 這個問題在EF7中解決了嗎?
  • 我可以對EF進行配置並確定隨機順序,但是,是否可以保證它與相同的隨機順序一致或者在請求之間是否發生變化? (如果這個問題的答案是肯定的,我可以採用我的其他代碼)。
  • 每次添加時,是否有比dbContext.SaveChanges()更好的維護順序的方法?

一般承認的答案

  • 您無法在EF6或EF7中指定保存訂單。
  • EF7中沒有解決該問題,因為這不是問題。
  • 如果前任是相同的(可能很少發生),順序將是相同的

當您調用SaveChanges時,所有實體都按照方法“ProduceDynamicCommands”中的內部順序排序,然後通過方法“TryTopologicalSort”再次排序,該方法循環添加沒有前任的命令(如果添加A和B,A依賴於B,然後B將插入A)

您可以通過批量添加進行插入。

由於執行插入需要3秒鐘,我將假設您有數千個實體,並且執行批量插入可以提高您的性能,將10秒減少到更少,然後可能是最初的3秒!

這裡有2個我可以推薦的庫:

免責聲明 :我是Entity Framework Extensions項目的所有者。


熱門答案

您可以在使用添加功能之前訂購它,然後使用保存?它會幫助/嘗試這個嗎?





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因