亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實體框架:“存儲UPDATE、INSERT或DELETE語句影響到意外的行數(0)”。

實體框架:“存儲UPDATE、INSERT或DELETE語句影響到意外的行數(0)”。

UYOU 2019-06-28 17:04:07
實體框架:“存儲UPDATE、INSERT或DELETE語句影響到意外的行數(0)”。我使用實體框架填充網格控件。有時,當我進行更新時,會出現以下錯誤:存儲UPDATE、INSERT或DELETE語句影響到意外的行數(0)。自加載實體以來,實體可能已被修改或刪除。刷新ObjectStateManager條目。我不知道怎么復制這個。但這可能與我更新的距離有多近有關。有沒有人看到這個,或者有人知道錯誤信息指的是什么?編輯:不幸的是,我不再自由地重現我在這里遇到的問題,因為我離開了這個項目,不記得我是否最終找到了一個解決方案,如果是另一個開發人員修復了它,還是我為它工作過。因此,我不能接受任何答案。
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

這是一個叫做樂觀并發的特性的副作用。

不能100%確定如何在實體框架中打開/關閉它,但它所告訴您的基本上是,當您從數據庫中抓取數據時,當您保存更改時,其他人更改了數據(這意味著,當您保存數據時,實際更新了0行數據)。在SQL術語中,它們的update查詢的where子句包含行中每個字段的原始值,如果0行受到影響,它就知道出了問題。

背后的想法是,您不會最終覆蓋應用程序不知道已經發生的更改-這基本上是.NET在您的所有更新中加入的一種安全措施。

如果它是一致的,則可能發生在您自己的邏輯中(EG:您實際上是在另一個方法中更新數據-在SELECT和UPDATE之間),但它可能只是兩個應用程序之間的一個競爭條件。


查看完整回答
反對 回復 2019-06-28
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

我遇到了這種情況,這是由于實體的ID(Key)字段未被設置所致。因此,當上下文保存數據時,它無法找到ID=0。確保在UPDATE語句中放置一個斷點,并驗證實體的ID是否已設置。

來自Paul Bellora的評論

我遇到了這個問題,原因是我忘記在.cshtml編輯頁面中包含隱藏的ID輸入。


查看完整回答
反對 回復 2019-06-28
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

哇,很多答案,但是當我做了一些其他人沒有提到的稍微不同的事情時,我得到了這個錯誤。

長話短說,如果您創建一個新對象并告訴EF使用EntityState.Modified然后它會拋出這個錯誤,因為它還不存在于數據庫中。這是我的代碼:

MyObject foo = new MyObject(){
    someAttribute = someValue};context.Entry(foo).State = EntityState.Modified;context.SaveChanges();

是的,這似乎很愚蠢,但它的出現是因為所討論的方法過去foo傳遞給它之前創建的,現在它只具有someValue傳遞給它并創建foo本身。

簡單的修復,只要改變EntityState.ModifiedEntityState.Added或將整條線改為:

context.MyObject.Add(foo);


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 1036 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號