2015-09-15 111 views
0

我在EF上嘗試執行SaveChanges()時收到了唯一的約束違規。實體框架6 SaveChanges導致唯一約束異常

有兩欄,分別爲IDOrder。唯一的約束是在這兩列上。

我正在更新訂單(交換兩個值)。

但是,當我做SaveChanges()我得到一個DBUpdateExcception說我違反了獨特的約束 - 但我沒有! 我剛換了訂單

Name | ID | Order 
BH | 49 | 1 
JK | 49 | 2 

所以在代碼中,它現在看起來像這樣(我已經檢查調試器中的EF)

Name | ID | Order 
BH | 49 | 2 
JK | 49 | 1 

正如我雖然說,當我做SaveChanges()我得到一個異常。

我不知道我的模型在visual studio 2015中是否存在問題(必須設置屬性或其他內容以允許更新?)。這個問題在我看來是「它」沒有正確地進行更新。

感謝任何幫助!

+0

發佈您的實際C#代碼,如模型和保存更改 –

+0

如果我正確地理解這是不可能的。請參閱[這裏](https://social.msdn.microsoft.com/Forums/en-US/e483f98e-085b-46ba-b748-6e1614558efc/updating-the-entity-primary-key?forum=adodotnetentityframework)。正如答案中所述,可以刪除舊的實體並讀取新的實體,但這取決於您的數據庫關係結構。 – ieaglle

+0

@CallumLinington對不起,我在發佈時無法訪問我的代碼 - 不得不在午餐和記憶中嘗試。 – Yabbie

回答

3

EntityFramework一次更新一行。 所以通過切換兩個對象的Order價值,並呼籲SaveChanges()它首先觸發的是這樣的:

UPDATE TABLENAME SET [Order] = 2 WHERE [TABLENAME].[ID] = 49 AND [TABLENAME].[Order] = 1 

如果此更新將被執行,就必須在獨特的表中的兩行具有相同的值約束。這就是你得到錯誤的原因。

+1

這就是我所害怕的。那麼有沒有辦法做我想做的事情?我不能成爲第一個需要更新作爲唯一約束的一部分的值的人?我不認爲有可能通過代碼臨時禁用DB上的約束... – Yabbie