3

我們正在運行到哪裏,當我們提交的幾個對象的列表被添加到我們得到有關外鍵的錯誤數據庫中的問題...實體框架插入多個記錄時的外鍵問題?

using (context ctx = new context() 
{ 
    foreach(foo f in bars) 
    { 
     ctx.AddToFoo(f); 
    } 
    ctx.SaveChanges(); 
} 

錯誤說,與插入語句衝突foriegn關鍵約束,但如果我移動foreach循環內SaveChanges()它工作正常,但它似乎會慢得多...

我會捲到BulkCopy類,但我們有一堆日誌代碼綁定到SaveChanges。

編輯: 這裏是例外Linky

+3

小心分享錯誤?另外值得啓動SQL Profiler或EFProf來查看正在發佈的實際SQL,以便了解它是否嘗試按錯誤順序執行任何操作。 – 2011-12-14 14:20:55

+0

我只有一個打印出來,所以我試圖得到一個上傳的例外圖片... – Chuck 2011-12-14 15:01:05

+0

好的這[鏈接到圖片](http://www.flickr.com/photos/[email protected]/ 6510885421 /) – Chuck 2011-12-14 15:09:43

回答

0

它看起來像SaveChanges每富不保存在相同的順序,他們在AddToFoo添加的圖片的鏈接。

0

我不知道它爲什麼會在for循環中工作。如果循環外有異常,那麼它也應該在內部發生異常。

您應該排除異常中列出的外鍵約束。所以,如果約束條件是「FK_Foo_Parent」,那麼你首先需要有一個父項目,Foo項目引用。

您的代碼應該是這樣的:

   using (context ctx = new context()) 
       { 
        ctx.AddToParents(parent); 

        foreach (foo f in bars) 
        { 
         parent.Foos.Add(f); 
         ctx.AddToFoos(f); 
        } 
        ctx.SaveChanges(); 
       } 

,將設置新富記錄與其父記錄之間的外鍵引用。