2012-07-11 101 views
1

我要插入的對象具有父對象作爲導航屬性。使用EF插入行時違反唯一鍵約束4

當我「添加」插入它的對象時,它還將我父對象(已插入)的ObjectStateManager設置爲Added並嘗試插入它。我已經在SQL Profiler中對它進行了驗證,從而引發了唯一密鑰違例的例外。

我在兩個方面

  1. 擺脫這個加我設定的目標之前,所有的導航屬性設置爲null
  2. 設置父對象的ObjectStateManagerModified

但是,這似乎更像是一種解決方案。我相信Entity Framework必須有一些優雅的解決方案。

請提出建議。

回答

0

第二種方法是針對此問題的正確解決方案。當您撥打AddObject時,EF將從Added狀態的對象圖中附加所有實體。如果圖中還有現有實體,則必須通過將其狀態設置爲UnchangedModified來告知EF。

+2

是否有任何簡單的方法(單步)爲所有現有實體設置修改/不變狀態。而不是一個接一個地去做導航屬性.. – MegaMind 2012-07-11 08:44:34

+0

不可以,但是你可以通過附加整個圖形並將添加的實體更改爲新增狀態來使用反向操作,但它可能會導致添加關係時出現一些問題。 – 2012-07-11 08:50:09