Если вы делаете все это в одном контексте, вам нужен только один SaveChanges
в конце:
A a=new A();
B b=new B();
a.addB(B);
using (MyDbContext m = new MyDbContext())
{
m.As.Add(a);
C c=new C(a,b);
m.Cs.Add(c);
m.SaveChanges();
}
EF создаст только один A
и один B
и используети в отношениях в b
и в c
.
Если вам нужно - по какой-то причине - создать два контекста, вы должны заново присоединить объекты, вставленные в первый контекст, чтобы избежать повторной вставки и дублированияв базе данных:
A a=new A();
B b=new B();
a.addB(B);
using (MyDbContext m = new MyDbContext())
{
m.As.Add(a);
m.SaveChanges();
}
// ...
using (MyDbContext m2 = new MyDbContext())
{
m2.As.Attach(a);
m2.Bs.Attach(b);
C c=new C(a,b);
m2.Cs.Add(c);
m2.SaveChanges();
}