AddObject上的Entity Framework 4.0并发异常

时间:2013-01-31 18:44:40

标签: asp.net entity-framework entity-framework-4 concurrency webforms

每当我在上下文中执行Object时,我遇到了执行并发异常的问题

我有这个:(我在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 profiler,我唯一注意到的是它试图插入新实例两次。而已。没有错误或类似的东西。

思想?

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"

1 个答案:

答案 0 :(得分:2)

解决了这个问题。这是因为桌子上的触发器。当你执行一个addobject时,实体框架需要一个Id,如果它没有得到那个Id,它认为它是一个由两个实例修改的更新,然后会抛出该错误。