我正在將Linq用於一般CRUD操作的實體。最近,我有一個場景,我必須在數據庫中複製整個記錄(在所有相關表中使用不同的主鍵)。我的數據庫結構非常簡單。我有一個主表(可以說A)和其他表(可以說B,C,D)。主表保存表B,C,D的主鍵作爲外鍵。Linq複製/複製整個記錄
我從數據庫獲取記錄,我必須複製。然後我
1)更改使用context.objectStateManager.ChangeObjectState(AObj其目的狀態改變爲 「增加」,EntityState.Added)
2)添加在上下文中使用context.AddToA(AObj)對象
3)然後我做saveChanges()
一切正常工作表A和適當的新對象插入。
如果我上表相同的步驟B,C,d我到 「增加」 使用context.objectStateManager.ChangeObjectState(AObj.B異常
1)改變其狀態的對象, EntityState.Added)//在這裏,我訪問子表乙
2)添加在上下文中使用context.AddToA(AObj)對象
3)然後我做的SaveChanges()
objectContext可能處於不一致的狀態。參考 完整性約束voilation發生。 定義重建約束的屬性值在主體 和關係中的相關對象之間不一致。
的討論,你可能想改變你的儲蓄因此要創建無按鍵konstrains順序 –
嗯,我也試圖在表中手動插入數據(相同的,因爲我是在代碼中執行),並且所有內容都會插入任何錯誤。 linq有些問題。 –
您不需要添加項目,它們已經在上下文中。你只需要改變他們的狀態。 –