データベースファーストのアプローチでは、まずエンティティ 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();
}
}