我们假设我们有这样的类
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; }
}
在代码中,我为它们创建新实例,并建立如下关系:
A a = new A () { someField = "abcd"};
B b = new B () { someIntField = 42 };
A.B = b;
B.A = 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();
}
是否足以将相关对象存储到数据库中?
答案 0 :(得分:7)
从您的示例中,如果您实例化新的实体对象,然后将子项分配给父对象的属性,那么EF将实际创建一个新的子实例(记录)并将其映射到父项作为参考。
您的代码段有点令人困惑,因为您已从A到B和B到A的引用,但请考虑以下事项:
如果您有2个实体:
public class A
{
public int Id;
}
public class B
{
public int Id;
public A A;
}
当你保存时你做了类似的事情:
A a = new A();
B b = new B();
b.A = a;
dbcontext.SaveChanges();
然后EF将为A创建一个新记录,一个B的新记录,并将新创建的A记录的引用添加到B.
有关详细信息,请参阅this帖子
答案 1 :(得分:2)
保存包含其他对象的对象就足够了。它也会自动将更改保存到包含的对象中。
你可以创建一个小例子,看看自己有什么用。
答案 2 :(得分:0)
using (var db = new myDbContext()) {
myDbContext.As.Add(A);
myDbContext.SaveChanges();
}
这应该足够了。