实体框架:删除后向上下文添加新实体的问题

时间:2017-05-04 14:13:45

标签: c# entity-framework entity-framework-6 associations

在我的上下文中,我将删除一个现有实体。在同一个上下文中,我试图使用下面的代码添加一个新实体:

        if (entity != null && EFContext.Entry(entity).State == EntityState.Detached)
        {
            try
            {
                var entityName = entity.GetType().Name;             
                GetObjectContext.AddObject(entityName + "s", entity);
            }
            catch (Exception ex)
            {
                log(ex);
                throw;
            }
        }

我遇到的问题是当我将新创建的实体传递给上面的方法时,当它检查实体状态时,它会抛出异常: *

  

与处于Deleted状态的实体添加关系是   不允许

我还没与删除的实体建立任何关系,为什么会抛出此异常?我试图在另一个简单的项目上重现这个问题,但无法在那里重现它。 有谁知道为什么EF会抛出那个例外?

更新 我有学生和背包实体。背包参考学生(一对多)。在我的情况下,我正在删除其中一个背包,并试图创建一个新的学生实体。当我检查对象状态时,我得到上面的例外。

这是调用堆栈: enter image description here

1 个答案:

答案 0 :(得分:0)

EFContext.Entry(entity)此时将实体添加到上下文中。

这里的问题很可能是你删除的背包在被删除之后可能有一个FK设置为​​0或什么?如果是这样,那么当你添加这个新学生时,那个被删除的学生最终会在这个新学生的上下文之下,因为它还有一个ID为0。作为临时修复,尝试在调用Entry(实体)之前将此新Student的PK设置为-1,并查看是否有任何效果。