在我的项目中,我有学生和背包实体。背包参考学生(一对多)。所以我在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将从列表中删除现有对象。这是调用堆栈:
我试图在一个简单的项目上重现同样的问题,但是,还没有成功。任何人都知道为什么EF会从Collection导航属性中删除我的对象?
答案 0 :(得分:0)
请尝试更改 GetObjectContext.AddObject(entityType.Name +" s",entity); to GetObjectContext.AddObject(entity);
答案 1 :(得分:0)
我想出了这个问题。我的引用导航属性中有一个业务逻辑,并且在加载期间不允许设置引用属性值。这就是为什么当我试图获得对象状态时它将它从集合中删除。 因此,当我用背包装载学生时,Backpack.Student属性为null。在对我的代码进行更改之后,引用属性已经设置并修复了我遇到的问题。