C# 在根对象上设置EntityState.Modified是否会将任何新对象添加到数据库?

C# 在根对象上设置EntityState.Modified是否会将任何新对象添加到数据库?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我正在使用EntityFramework将我的C#/WPF项目链接到SQL Server数据库。我有一个对象,它具有指向其他类型对象的导航属性(因此链接到数据库中的其他表) 如果我为其中一个导航属性创建了一个新对象,并将其添加到根对象,那么在不必检查所有现有属性并将其与此新对象进行比较的情况下,将其添加到DB的最佳方法是什么 MyTable obj = (from myTableObject in db.MyTable select myTableObject).FirstOrDefault()

我正在使用EntityFramework将我的C#/WPF项目链接到SQL Server数据库。我有一个对象,它具有指向其他类型对象的导航属性(因此链接到数据库中的其他表)

如果我为其中一个导航属性创建了一个新对象,并将其添加到根对象,那么在不必检查所有现有属性并将其与此新对象进行比较的情况下,将其添加到DB的最佳方法是什么

MyTable obj = (from myTableObject in db.MyTable select myTableObject).FirstOrDefault();
obj.FirstNavProperties.Add(new FirstNavProperty());
db.Entry(obj).State = EntityState.Modified;
上面的代码会添加新的FirstNavProperty吗?

当您使用add()时,您不会更改MyTable表,而是向FirstNavProperties表添加一条新记录。obj.FirstNavProperties只保留FirstNavProperties列表的地址。Add()自动将FirstNavProperties的状态更改为Added。因此,请删除:

 db.Entry(obj).State = EntityState.Modified; 

从你的代码。您可以调用db.SaveChanges()。

您不需要db.Entry(obj.State=EntityState.Modified;完全改为调用db.SaveChanges()。这是否要求上下文保持打开状态?如果上下文在两者之间被关闭了呢?你认为你如何“保持上下文的开放性”/你认为上下文是什么/你认为它存在于何处?@CaiusJard不太适合这个例子,而是像
使用db=new Entities()
感谢第一段的解释;我没有意识到使用.Add()会自动设置新FirstNavProperty的状态