C# 保存前是否需要将相关对象添加到上下文中?
我从实体框架中得到了一些意想不到的行为,我想验证我的期望是否是错误的,或者我是否应该怀疑系统配置有缺陷 有一个实体主控,其中一个字段是仆从类型的列表。在数据库中,它们对应于通过主键相互关联的两个表 在这个程序中,我从数据库中获取一个预先存在的主设备,并向其添加一个新的仆从。因为当时我不在上下文中,所以我创建了一个,并添加了仆从添加到的主,就像这样C# 保存前是否需要将相关对象添加到上下文中?,c#,entity-framework,entity-framework-6,datacontext,C#,Entity Framework,Entity Framework 6,Datacontext,我从实体框架中得到了一些意想不到的行为,我想验证我的期望是否是错误的,或者我是否应该怀疑系统配置有缺陷 有一个实体主控,其中一个字段是仆从类型的列表。在数据库中,它们对应于通过主键相互关联的两个表 在这个程序中,我从数据库中获取一个预先存在的主设备,并向其添加一个新的仆从。因为当时我不在上下文中,所以我创建了一个,并添加了仆从添加到的主,就像这样 using (ModelContext context = new ModelContext()) { context.Masters.AddOr
using (ModelContext context = new ModelContext())
{
context.Masters.AddOrUpdate(master);
foreach (Minion minion in master.Minions)
context.DirectDebitStatus.AddOrUpdate(minion);
int count = context.ChangeTracker.Entries()
.Where(x => x.State == EntityState.Added || x.State == EntityState.Modified)
.Count();
context.SaveChanges();
}
我认为foreach循环是不必要的,因为添加的Minion实例应该被实体框架识别并相应地添加到数据库中。然而,事实并非如此,我不确定原因。我怀疑还有其他问题,但在我开始花大量时间解决这个问题之前,我想确保这不是一场鹅追逐,而是一场虫子追逐。是的,你的期望是正确的-你不应该添加仆从。添加主人并保存也会保存所有与主人相关的仆从。@Peter非常清楚。现在,显然EF并不认为它们是关联的。有没有关于如何调查原因的建议?在主人被添加到上下文集合之后,我不需要添加仆从,是吗?主人是预先存在的,而仆从是在这个过程中创建的,这并不重要,不是吗?嗯,很难说没有看到更多或周围的代码。师父从哪里来?如果主机断开连接,并且向其中添加了仆从,则使用AddOrUpdate可能不会添加或更新仆从。AddOrUpdate的作用是什么?我怀疑它改变了EntityState,它只对这个条目和这个条目这样做。如果还想添加导航属性,则必须使用DbSet.Add-Method。如果您想添加条目,但不想添加导航属性,那么对实体状态的操纵确实很有效——在我的项目中,我一直这样做,以避免产生任何令人讨厌的副作用。