1
我有每當我在我的情況下做的一個對象,具有做併發異常問題

實體框架4.0併發異常上ADDOBJECT

我有這樣的:(我使用它的WebForms BTW)

using(entities ctx = new entities()){ 
    EventModel newEvent = new EventModel{ 
     Name = "name", 
     Description = "description", 
     CreationDate = DateTime.Now, 
     CreatedBy = CurrentUserId() 
    }; 

    try{ 
     ctx.EventModels.AddObject(newEvent); 
     ctx.SaveChanges(); 
    }catch(OptimisticConcurrencyException ocex){ 
     if(ctx.ObjectStateManager.GetObjectStateEntry(newEvent).State == EntityState.Added){ 
       // proves that it is added. 
     } 
    }catch(Exception ex){ 
      throw ex; 
    } 
} 

我不確定現在在哪裏看。我試過sql分析器,我唯一注意到的是它試圖插入新的實例兩次。而已。沒有錯誤或類似的東西。

想法?

BTW:這是錯誤我得到

商店更新,插入或刪除語句影響了意外 的行數(0)。自從裝載了實體 以來,實體可能已被修改或刪除。刷新ObjectStateManager條目。

編輯:這是在分析器上執行的SQL。相同的SQL執行兩次。

exec sp_executesql N'insert [dbo].[EventModel]([Name], [Description], [CreationDate], [CreatedBy]) values (@0, @1, @2, @3)', @0="Name", @1="description", @2="2013-01-31 11:41:41.5231006", @3="1" 
+0

如果你從profiler發佈了實際的SQL,它會有所幫助,但看起來你可能設置了一個併發令牌嗎? –

+0

checl http://stackoverflow.com/questions/1836173/entity-framework-store-update-insert-or-delete-statement-affected-an-unexpec – spajce

+0

這實際上是我爲什麼檢查與SQL分析器,看看有沒有有任何更新。但沒有更新,它們都是插入(也是相同的)。 – gdubs

回答

2

解決了這個問題。這是因爲桌面上的觸發器。當你做一個addobject的時候,實體框架需要一個Id,如果它沒有得到這個Id,它會認爲它是一個已被兩個實例修改過的更新,然後這個實例會拋出該錯誤。

+0

對我也一樣,謝謝! –