エンティティ(またはオブジェクト)に関してClass
は、のコレクションを持つオブジェクトとのコレクションをStudents
持つStudent
オブジェクトがありClasses
ます。あなたのでStudentClass
、テーブルはIDのみと余分な情報が含まれている、EFは、加入テーブルのエンティティを生成しません。それが正しい動作であり、それはあなたが期待することです。
ここで、挿入または更新を行うときは、オブジェクトの観点から考えてみてください。たとえば、2人の生徒がいるクラスを挿入するClass
場合は、Student
オブジェクトを作成し、オブジェクトをクラスのStudents
コレクションに追加して、Class
オブジェクトをコンテキストに追加して、次のように呼び出しますSaveChanges
。
using (var context = new YourContext())
{
var mathClass = new Class { Name = "Math" };
mathClass.Students.Add(new Student { Name = "Alice" });
mathClass.Students.Add(new Student { Name = "Bob" });
context.AddToClasses(mathClass);
context.SaveChanges();
}
これにより、Class
テーブルに1つのエントリ、Student
テーブルに2つのエントリ、StudentClass
それらをリンクするテーブルに2つのエントリが作成されます。
あなたは基本的にアップデートに対して同じことをします。データをフェッチし、コレクションにオブジェクトを追加および削除してグラフを変更し、を呼び出しますSaveChanges
。詳細については、この同様の質問を確認してください。
編集:
あなたのコメントによると、あなたは新しいものを挿入しClass
、それに2つの既存のものStudents
を追加する必要があります:
using (var context = new YourContext())
{
var mathClass= new Class { Name = "Math" };
Student student1 = context.Students.FirstOrDefault(s => s.Name == "Alice");
Student student2 = context.Students.FirstOrDefault(s => s.Name == "Bob");
mathClass.Students.Add(student1);
mathClass.Students.Add(student2);
context.AddToClasses(mathClass);
context.SaveChanges();
}
両方の生徒がすでにデータベースにあるので、それらは挿入されませんが、現在のStudents
コレクションにあるのでClass
、2つのエントリがStudentClass
テーブルに挿入されます。