在数据库优先方法中,首先您的实体 AB 不必要地将主键作为其关联实体。除非您想在该表上保留其他属性,否则不需要 Pk,否则会导致 EF 4 创建单独的实体。
Db关系图:
EF edmx 结果:
使用这种关系来回答您的问题。
public void addNewBtoA(B newEntity, A existingEntity) {
_myContext.Attach(existingEntity);
existingEntity.B.Add(newEntity);
myContext.SaveChanges();
}
编辑:
AB 记录由 EF 在 Db 中为多对多关系自动创建。
编辑2:
如果实体 AB 上有其他属性,则 EF 会将其作为单独的实体导入,更新上下文将总结如下:
B b = new B {
Name = "name"
};
AB ab = new AB {
A = existingA,
B = b,
arbitraryProp = "my heart is a fist of blood"
}
_myContext.Attach(existingA);
_myContext.Add(b);
_myContext.Add(ab);
_myContext.SaveChanges();
添加的顺序无关紧要,因为 EF 根据 .edmx 中定义的模型关系确定插入顺序。请记住,仅当当前未跟踪existingA
时才需要附加- 即,如果已使用然后它已被附加。existingA
_myContext
existingA
_myContext.A.SingleOrDefault()
编辑 3:
public void testab() {
A existingA = new A {
Name = "test a"
};
using (ABEntities context = new ABEntities()) {
context.A.AddObject(existingA);
context.SaveChanges();
}
using (ABEntities context = new ABEntities()) {
B newB = new B {
Name = "test b"
};
context.Attach(existingA);
existingA.B.Add(newB);
context.SaveChanges();
}
}