實體框架:“存儲更新,插入或刪除語句影響了意外的行數(0)。”

entity-framework

我正在使用Entity Framework來填充網格控件。有時當我進行更新時,我收到以下錯誤:

存儲更新,插入或刪除語句會影響意外的行數(0)。自實體加載後,實體可能已被修改或刪除。刷新ObjectStateManager條目。

我無法弄清楚如何重現這一點。但它可能與我進行更新的距離有多大關係。有沒有人看過這個或有沒有人知道錯誤信息是指什麼?

編輯:不幸的是我不再自由地重現我在這裡遇到的問題,因為我離開了這個項目並且不記得我是否最終找到了解決方案,如果另一個開發人員修復它,或者我是否解決了這個問題。因此我不能接受任何答案。

一般承認的答案

這是一種稱為樂觀並發的功能的副作用。

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

它背後的想法是你不會最終覆蓋你的應用程序不知道發生的變化 - 這基本上是.NET在你所有更新中引入的一點安全措施。

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


熱門答案

我遇到了這個問題,這是由實體的ID(密鑰)字段未設置引起的。因此,當上下文保存數據時,它找不到ID = 0.確保在update語句中放置一個斷點並驗證是否已設置實體的ID。

來自Paul Bellora的評論

我有這個確切的問題,因為忘記在.cshtml編輯頁面中包含隱藏的ID輸入



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因