Entity Framework是否自动保存相关类?

我们假设我们有这样的类

public class A{ string someField { get; set; } public virtual BB {get; set; } } public class B { int someIntField {get; set; } [ForeignKey("Id")] [Required] public virtual AA { get; set; } } 

在代码中,我为它们创建了新实例,并建立了如下关系:

 A a = new A () { someField = "abcd"}; B b = new B () { someIntField = 42 }; AB = b; BA = a; 

我应该使用DBContext来保存这样的类:

 using (var db = new myDbContext()) { myDbContext.As.Add(A); myDbContext.Bs.Add(B); myDBContext.SaveChanges(); } 

或者保存它:

 using (var db = new myDbContext()) { myDbContext.As.Add(A); myDbContext.SaveChanges(); } 

是否足以将相关对象存储到数据库中?

从您的示例中,如果您实例化新的实体对象,然后将子项分配给父对象的属性,那么EF将实际创建一个新的子实例(记录)并将其映射到父项作为引用。

你的代码片段有点混乱,因为你有从A到B和B到A的引用,但请考虑以下内容:

如果你有2个实体:

 public class A { public int Id; } public class B { public int Id; public AA; } 

保存时你做了这样的事情:

 A a = new A(); B b = new B(); bA = a; dbcontext.SaveChanges(); 

然后EF将为A创建一个新记录,为B创建新记录,并将新创建的A记录的引用添加到B.

有关详细信息,请参阅此post

保存包含其他对象的对象就足够了。 它也会自动将更改保存到包含的对象中。

你可以创建一个小例子,看看自己有什么用。

 using (var db = new myDbContext()) { myDbContext.As.Add(A); myDbContext.SaveChanges(); } 

那应该够了。