2017-10-10 76 views
3

我需要在我的實體框架應用程序中實現「按年份」執行「移位」操作。更新操作違反唯一約束條件

爲了簡化問題,假設我有一個實體/表有一個外鍵FK其他一些表和(INT,INT)。用戶可能會將實體年數轉移到未來,因此我需要複製2017年到2018年的數據等等。

數據庫中存在一個限制,表示該對(FK,YEAR)必須是唯一

當我在內存中執行「shift」並將更改發送到數據庫時SaveChanges我收到數據庫中的一個錯誤,我違反了唯一約束。我想它試圖逐行執行更新,因此違規。

如果我按年降序排列集合(所以如果逐行發送不會發生重複),則會發生相同的錯誤。

我的解決方法是刪除舊數據,並與新的年插入新的數據,但我認爲有可能是一個更清潔的解決方案......

+0

您是否嘗試先禁用該約束,進行更新,然後重新啓用它? – AgapwIesu

+0

您必須將'identity insert'設置爲on,執行操作並再次將其關閉。 – DiskJunky

+0

您不希望多行具有相同的'ID'值,假設它也是您的主鍵。如果您試圖添加新記錄而不是更新現有記錄,那麼您不應該擁有相同的「ID」,因此您的唯一約束最有可能毫無意義,因爲其中一個值始終會發生變化。相反,如果您正在更新該記錄,則還有其他事情正在進行。我們需要了解數據庫表是如何定義的,以及您用來執行** shift **和保存的代碼。 – krillgar

回答

0

我通過顛倒順序解決這個問題,修改後逐項保存。運行如此多的SaveChange並不是很乾淨,但整個過程相當複雜,它使用的是交易,所以這不是什麼大問題。

我必須做出一些更改,因爲用戶可以將年份轉移到過去或未來,在這種情況下,我必須/不能顛倒順序,但爲了簡化這個問題,假設我已經解決了反向訂單並保存項目