請耐心跟我解釋一下。實體框架存儲過程插入自定義序號
我有一個在EF4中使用映射存儲過程插入數據的表設置。
實施例:
id | location | type
1 | 10 | 15
5 | 10 | 16
什麼SP所做的是在另一表中檢查按位置和類型相對應的下一個ID。
所以在這個例子中,下一個ID將是
- 2位置10並鍵入15
- 6位置10類型16
這是通過在EF映射的結果列。
它工作正常,除了當兩個不同的密鑰具有相同的序列號例如:
id | location | type
1 | 10 | 11
1 | 10 | 10
編輯:當我在同一時間既創造新行出現此錯誤。
對他們倆的下一個值是2,將數據保存到數據庫中,但該應用程序失敗此消息:
到數據庫的更改被成功提交,但出現錯誤 而更新對象上下文。 ObjectContext可能處於 不一致狀態。
內部異常消息:
AcceptChanges無法繼續,因爲對象的鍵值與ObjectStateManager中的另一個 對象衝突。
在調用AcceptChanges之前,確保鍵值是唯一的。
有什麼建議嗎?
編輯 存儲過程示例
聲明@nextNumber詮釋
SELECT @nextNumber =值+ 1 FROM SEQUENTIAL_TABLE WHERE位置= @location和類型= @類型
INSERT INTO TABLE(位置,類型,ID,......)VALUES(@位置,@類型,@ nextnumber,.......)
UPDATE SEQUENTIAL_TABLE SET value = @nextNumber WHERE loca重刑= @location和類型= @型
SELECT @nextNumber爲[NextNumber]
嘗試將僞造否定鍵分配給新實體。像-1,-2一樣,EF可以將它們分開。 –