Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存前是否需要将相关对象添加到上下文中?_C#_Entity Framework_Entity Framework 6_Datacontext - Fatal编程技术网

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。如果您想添加条目,但不想添加导航属性,那么对实体状态的操纵确实很有效——在我的项目中,我一直这样做,以避免产生任何令人讨厌的副作用。