【问题标题】:Entity Framework 4.0 Concurrency Exception on AddObjectAddObject 上的 Entity Framework 4.0 并发异常
【发布时间】:2013-01-15 23:21:51
【问题描述】:

每当我在上下文中执行对象时,都会遇到并发异常问题

我有这个:(我在网络表单上使用它)

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

想法?

顺便说一句:这是我得到的错误

存储更新、插入或删除语句影响了意外 行数 (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"

【问题讨论】:

  • 如果您从分析器发布实际 SQL 会有所帮助,但看起来您的并发令牌设置不正确?
  • 这实际上是我使用 sql profiler 检查是否有任何更新的原因。但是没有更新,它们都是插入(也是相同的)。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多