産生這個問題的原因,其時是由我們的習慣引起的,一般說過,我們的update操作是這樣的
1 從資料表把資料獲出來
2 修改取出現的實體值
3 發回給資料表,更新成功
這看上去沒有問題,但在EF環境中就會産生問題,因為當你取實體時,預設情況下EF會向ObjectStateManager送出一種跟蹤機制,即向它裡面添加了一個鍵值,
而當你調用update時,這時它已經有這個鍵值了,所有出現異常也很正常。
解決方法1:
不使用上面的邏輯,直接将實體附加到資料上下文中,這是可以的
解決方法2:
在擷取單條實體時,取消實體跟蹤,擴充方法是AsNoTracking(),這時不會向ObjectStateManager添加鍵值,在更新時,就不會出現這會異常了
呵呵,有時這些ORM架構給我們設了不少陷阱,然後等待我們自己去挖出這個陷阱,然後,自己再跳進去,這讓我想起了蘇轼的一首詩:
隻緣身在此山中