天天看點

編譯器錯誤~不能向ObjectStateManager添加相同的鍵

産生這個問題的原因,其時是由我們的習慣引起的,一般說過,我們的update操作是這樣的

1 從資料表把資料獲出來

2 修改取出現的實體值

3 發回給資料表,更新成功

這看上去沒有問題,但在EF環境中就會産生問題,因為當你取實體時,預設情況下EF會向ObjectStateManager送出一種跟蹤機制,即向它裡面添加了一個鍵值,

而當你調用update時,這時它已經有這個鍵值了,所有出現異常也很正常。

解決方法1:

不使用上面的邏輯,直接将實體附加到資料上下文中,這是可以的

解決方法2:

在擷取單條實體時,取消實體跟蹤,擴充方法是AsNoTracking(),這時不會向ObjectStateManager添加鍵值,在更新時,就不會出現這會異常了

呵呵,有時這些ORM架構給我們設了不少陷阱,然後等待我們自己去挖出這個陷阱,然後,自己再跳進去,這讓我想起了蘇轼的一首詩:

隻緣身在此山中

繼續閱讀