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

C# 实体框架:删除后向上下文添加新实体的问题,c#,entity-framework,entity-framework-6,associations,C#,Entity Framework,Entity Framework 6,Associations,在我的上下文中,我正在删除一个现有实体。在相同的上下文中,我尝试使用下面的代码添加一个新实体: if (entity != null && EFContext.Entry(entity).State == EntityState.Detached) { try { var entityName = entity.GetType().Name;

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

        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;
            }
        }
我遇到的问题是,当我将新创建的实体传递给上面的方法时,当它检查实体状态时,它抛出异常: *

添加与处于“已删除”状态的实体的关系是不正确的 不准

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

更新: 我有一个学生和一个背包。背包指的是学生(一对多)。在我的例子中,我正在删除其中一个背包,并试图创建一个新的学生实体。当我检查对象状态时,我得到了上面的异常

以下是调用堆栈:

EFContext。条目(实体)将在此时将实体添加到上下文中


这里最有可能的问题是,您删除的背包在删除后可能将FK设置为0或其他什么?如果是这样的话,那么当你添加这个新学生时,被删除的一个学生将被置于这个新学生的上下文中,因为它的ID仍然是0。作为一个临时修复,在调用Entry(实体)之前,尝试将这个新学员的PK设置为-1,看看这是否有任何作用。

那么实体是否只有基本属性?您确定它没有关联实体,这些实体可能与已删除实体的关联实体相同?@AlexPaven否,它没有直接或间接引用已删除实体。我有学生和背包实体。学生背包。我删除了那个学生的一个背包。现在尝试创建一个新的学生实体。当我检查新创建的实体的状态时,我得到了异常。我还通过创建一个完全没有关联的实体进行了验证,但仍然得到了相同的异常。这听起来很奇怪。我很好奇异常的堆栈跟踪是什么。但是在我的脑海里,仅凭这些信息,我想不出任何可能导致这种情况的原因。除非主键的定义方式使EF决定新添加的实体与删除的实体相同,或者类似的东西。@AlexPaven我发布了调用堆栈。另外,当我在获得异常后尝试查看新添加的对象状态时,它会说它已分离。这是意料之中的,但我也不清楚为什么会出现异常。除了查看ObjectStateManager中的每一项并查看是否有任何内容看起来不合适之外,我没有任何建议。如果存在类似的项,并且您不确定它们是否真的是对同一项的引用,则可以在许多位置(如“快速观察”窗口或工具提示)右键单击该对象,然后选择“生成对象ID”,当您在调试器中查看该对象时,它将向该对象添加类似“#1”或“$1”的内容,以便更容易地识别它们。也许在执行过程中的各个步骤中都会这样做,看看在上下文中是否添加或更改了您意想不到的内容。