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