C# 添加新项时,实体框架正在从集合中删除现有项

C# 添加新项时,实体框架正在从集合中删除现有项,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,在我的项目中,我有学生和背包实体。背包参考学生(一对多)。所以我有一个DB的学生记录,它有两个背包。我正在从DB装载学生并计算背包数量。在这种情况下,它返回两个。当我向列表中添加一个新背包时,它将从集合中删除现有的两个背包。我不能发布我的代码,因为太复杂了。我会尽力解释我在做什么。 在背包中的学生参考属性设置器中,我正在检查学生背包集合中是否存在该背包。如果没有,则将背包添加到列表中。然后我将对象添加到实体框架上下文中。以下是代码: if (entity != null &

在我的项目中,我有学生和背包实体。背包参考学生(一对多)。所以我有一个DB的学生记录,它有两个背包。我正在从DB装载学生并计算背包数量。在这种情况下,它返回两个。当我向列表中添加一个新背包时,它将从集合中删除现有的两个背包。我不能发布我的代码,因为太复杂了。我会尽力解释我在做什么。 在背包中的学生参考属性设置器中,我正在检查学生背包集合中是否存在该背包。如果没有,则将背包添加到列表中。然后我将对象添加到实体框架上下文中。以下是代码:

        if (entity != null && EFContext.Entry(entity).State == EntityState.Detached)
        {
            try
            {
                var entityType = entity.GetType();
                GetObjectContext.AddObject(entityType.Name + "s", entity);
            }
            catch (Exception ex)
            {
                if (!ex.Message.Contains("Object references between two different object scopes are not allowed"))
                {
                    throw;
                }
            }
        } 
当调试器点击发布代码的第一行时,EntityFramework将从列表中删除现有对象。以下是调用堆栈:

我正试图在一个简单的项目上重现同样的问题,但还没有成功。有人知道为什么EF会从集合导航属性中删除我的对象吗?

请尝试更改
GetObjectContext.AddObject(entityType.Name+“s”,实体);到GetObjectContext.AddObject(实体)

我解决了这个问题。我的引用导航属性中有一个业务逻辑,不允许在加载期间设置引用属性值。这就是为什么当我试图获取对象状态时,它正在将其从集合中删除。 所以当我给学生装背包时,Backpack.student属性为空。在对代码引用属性进行更改后,设置了该属性,从而解决了我的问题