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

时间:2017-05-03 14:24:42

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

在我的项目中,我有学生和背包实体。背包参考学生(一对多)。所以我在DB中有学生记录,它有两个背包。我从DB装载学生并让背包计数。在那种情况下它返回两个。当我在列表中添加一个新背包时,它正在从集合中移除现有的两个背包。由于复杂性,我无法发布我的代码。我试着解释一下我在做什么。 在背包中的学生参考属性设定器中,我正在检查背包是否存在于学生背包系列中。如果没有,那么将背包添加到列表中。然后我将对象添加到Entity Framework上下文。这是代码:

        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;
                }
            }
        } 

当调试器命中已发布代码中的第一行时,Entity Framework将从列表中删除现有对象。这是调用堆栈:

enter image description here

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

2 个答案:

答案 0 :(得分:0)

请尝试更改 GetObjectContext.AddObject(entityType.Name +" s",entity); to GetObjectContext.AddObject(entity);

答案 1 :(得分:0)

我想出了这个问题。我的引用导航属性中有一个业务逻辑,并且在加载期间不允许设置引用属性值。这就是为什么当我试图获得对象状态时它将它从集合中删除。 因此,当我用背包装载学生时,Backpack.Student属性为null。在对我的代码进行更改之后,引用属性已经设置并修复了我遇到的问题。