最近在使用mvc5+EF的的時候用到了這句話
db.Entry(model).State = EntityState.Modified
看上去很簡單的修改數據,但是一直報錯,說是key已經存在,不能修改。
搞了很久,突發奇想的把前面的代碼
var approvalModel = CurrentUser.ApplicationForms.SingleOrDefault(t => t.ID == id).Approval;
if(approvalModel!=null){
db.Entry(model).State = EntityState.Modified;
}
改成
if (db.Approvals.Any(t => t.ApprovalID == model.ApprovalID))
{
db.Entry(model).State = EntityState.Modified;
}
就不報錯了。
是不是感覺很奇怪? 原因居然是approval已經取出來了,這是和數據庫有關聯,新的approval model雖然id一樣但不是同一個對象,不能修改!
或者
var db = new CarLoanDBContext();就是換一個db對象