之前遇到只更新部分的問題:如前端修改用戶信息(不修改密碼),傳實體到后台,這個實體是沒有密碼,這樣一來要更新的話,得先去數據庫通過傳過來的實體的ID讀取這條記錄,然后將改動的部分填到查出來的記錄中,再更新回去。
邏輯是對的,但是用EF,會有個問題,查出來后是默認緩存在entity這個上下文(dbcontent)中的,所以直接更新會報錯,於是我就想辦法查詢的時候不緩存到上下文中,Asnotracking,先記錄下,遲點整理,單詞亂拼的,這個解決問題了。
但是,這樣一來又會出現效率的降低,本來已經緩存在上下文中的,同次請求,多次用到這個記錄的時候,數據庫讀取一次就行了,現在就是每次都要重新讀取。
今天,才發現,原來要避免之前這個錯誤很簡單,數據查出來——緩存在上下文中——實體屬性變更——更新上下文。完事兒,關鍵就是我們不是去更新實體了,而是更新這個上下文。dbContext.saveChange();