我正在使用事務來在多個表中插入多行。對於這些行,我想按順序添加這些行。在調用SaveChanges時,所有的行都是亂序插入的。行插入順序實體框架
當不使用事務並在每次插入後保存更改確保訂單,但我確實需要所有條目的事務。
我正在使用事務來在多個表中插入多行。對於這些行,我想按順序添加這些行。在調用SaveChanges時,所有的行都是亂序插入的。行插入順序實體框架
當不使用事務並在每次插入後保存更改確保訂單,但我確實需要所有條目的事務。
實體框架中的訂單插入/更新和刪除取決於實體框架中的許多事情。
例如,如果您將新產品插入新類別,我們必須在產品之前添加類別。
這意味着如果您有一大組更改,那麼我們必須首先滿足局部排序約束,事實上這就是我們所做的。
您在上下文中執行操作的順序可能與這些規則衝突。例如,如果你這樣做:
ctx.AddToProducts(
new Product{
Name = "Bovril",
Category = new Category {Name = "Food"}
}
);
的效果是產品添加(上下文)第一,然後當我們走路上圖我們添加範疇了。
即插入順序進入上下文是:
Product
Category
但由於參照完整性約束,我們必須試圖插入到數據庫中之前重新排序是這樣的:
Category
Product
所以這本地重新排序是一種不可談判的方式。
但是,如果沒有這樣的本地依賴關係,理論上可以保持排序。不幸的是,我們目前沒有跟蹤'何時'添加到上下文中,出於效率的原因,我們不會跟蹤實體以保留像列表這樣的結構。因此,我們目前無法保留不相關插入的順序。
不過我們剛纔是在辯論這個,所以我很想看看這對你有多重要?
希望這有助於
亞歷
項目經理實體框架團隊
感謝您的解釋。如果支持,它肯定會節省我一些時間,但我想我也可以生成我自己的自定義主鍵以達到相同的效果。 – Wouter 2009-06-03 12:54:11
我在穿越這座橋的過程中來的。我正在用EF替換NHibernate,並且我正在運行的問題是如何將列表插入到數據庫中。如果我將項目添加到列表中(在pseduo代碼中):
list.Add(testObject); list.Add(testObject1);
我目前不保證在運行'SaveChanges'時得到相同的訂單。這很遺憾,因爲我的列表對象(即鏈表)知道它的創建順序。使用引用鏈接在一起的對象必須以相同的順序保存到數據庫中。不知道你爲什麼提到你在「辯論」這一點。 =)
爲什麼插入SQL數據庫的順序很重要? – 2009-05-28 15:33:13
插入順序並不重要,但主鍵的順序確實如此。 – Wouter 2009-06-03 12:55:56