2017-04-20 108 views
0

我試圖用實體框架做一個簡單的更新。有人能告訴我我的更新聲明有什麼問題嗎?實體框架不會更新記錄後狀態= EntityState.Modified SaveChanges()

一切都很順利 - 在運行時沒有錯誤,但是在數據庫中沒有任何變化。

這裏是我的代碼,我希望它能幫助

var cartItem = context.Carts.FirstOrDefault(x => x.id == id); 
cartItem.Quantity = quantity; 
context.Entry(cartItem).State = EntityState.Modified; 
context.Carts.Attach(cartItem); 

context.SaveChanges(); 

回答

0

我找到了解決我的問題。問題不是代碼錯誤,而是實體框架本身中的一個錯誤,當存在與SaveChanges上的edmx生成的對象相同名稱的aspx頁面,而不是將當前項目的模型屬性或/ m獲取網頁的屬性並拋出空引用異常,因爲它無法找到正確的查詢值。順便謝謝你的幫助和耐心。

1

那是因爲你要附加的實體之前調用SaveChanges方法:

var cartItem = context.Carts.FirstOrDefault(x => x.id == id); 
    cartItem.Quantity = quantity; 

    context.SaveChanges(); 

此外,如果你還沒有禁用的EF更改跟蹤那麼您不需要將State更改爲Modified,EF將爲您完成這項工作。當您撥打Attach方法時,您正在將State屬性設置爲Unchanged

您可以使用Attach這樣:

var cartItem= new Cart{id=id}; //Create an instance of your entity setting the key 
context.Carts.Attach(cartItem);// Attach the entity to the context 
cartItem.Quantity = quantity; //Set the property 
//If you haven't disabled change tracking or proxy creation, then you don't need to change the State, EF will do it. 
context.Entry(cartItem).State = EntityState.Modified; 

context.SaveChanges(); 
+0

如果我嘗試保存實體未連接時的更改,則代表上下文獲得空引用異常,因爲這裏沒有此實體 –

+0

空引用異常?我不明白爲什麼,無論如何,我會發布另一個解決方案,使用'附加' – octavioccl

+0

嗯是的,我發現它也很奇怪,這就是爲什麼我問這裏 –