2010-05-24 91 views
4

我有一個每10秒運行一次的Windows服務......每次運行時,它都會接收一些測試數據,修改它並使用EntityFramework將其保存到數據庫中。但是,每次嘗試持續更改時,我都會收到以下樂觀併發異常: -實體框架 - 樂觀併發問題

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

我知道一個事實,那裏沒有別的東西寫給那個數據庫,但是我的服務每隔10秒更新一次記錄。什麼可能導致併發異常在這裏?

我想對象圖中某個相關的實體在第二次保存操作之前就被修改了。 我所做的只是實例化一個新的對象上下文,並對我使用相同上下文檢索的某些記錄調用保存操作。 下面的代碼工作---

var ctx = new blahEntities(); 
var profile = ctx.ProfileSet.Where(pr=>pr.FirstName.Contains("a")).FirstOrDefault(); 
profile.Address = "modified"; 
ctx.SaveChanges(); 
ctx.Refresh(RefreshMode.StoreWins,profile); 
+0

我假設你正在調用'SubmitChanges()'。您可以嘗試每次創建一個新的'ObjectContext'副本。 – 2010-05-24 23:30:31

+0

是的,我稱之爲「SaveChanges」,這是「SubmitChanges」的EF等價物。當你說「創建ObjectContext的新副本時,你的意思是每次服務進入循環時,你想要傳遞一個新的objectcontext?現在,當服務啓動並且它被重用來執行時,對象上下文被創建一次數據庫操作有沒有辦法刷新現有的上下文? – Cranialsurge 2010-05-24 23:45:41

+0

你可以發佈一些代碼來說明你是如何修改你的實體的,因爲我看到這是由於附着/分離實體而發生的 – Nix 2010-05-25 01:34:24

回答

6

「行的意外數字(0)」表示更可能你沒有一個ID字段正確映射或在實體模型中定義的,或者你修改分離的實體並嘗試保存並且它沒有關鍵信息。

運行SQL Server分析器或實體框架分析器,並查看後臺正在進行的操作。

+0

剛剛有同樣的問題 – Nikoli 2014-06-12 12:58:57

2

曾經有這個相同的問題,並花了數小時跟蹤到一個故障的更新觸發器。如果您正在更新的表上有任何觸發器,請確保它們正常工作。我在Oracle環境中工作,fwiw。