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

h__*_*h__ 11 c# entity-framework ef-code-first

我们假设我们有这样的类

public class A{
    string someField { get; set; }
    public virtual B B {get; set; }
}

public class B {
   int someIntField {get; set; }

   [ForeignKey("Id")]
   [Required]
   public virtual A A { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

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

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

A.B = b;
B.A = a;
Run Code Online (Sandbox Code Playgroud)

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

using (var db = new myDbContext()) {
    myDbContext.As.Add(A);
    myDbContext.Bs.Add(B);
    myDBContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

或者保存它:

using (var db = new myDbContext()) {
    myDbContext.As.Add(A);
    myDbContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

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

amy*_*n04 7

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

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

如果你有2个实体:

public class A
{
    public int Id;
}

public class B
{
    public int Id;
    public A A;
}
Run Code Online (Sandbox Code Playgroud)

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

A a = new A();
B  b = new B();
b.A = a;
dbcontext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅帖子