Dalam istilah entitas (atau objek) Anda memiliki Class
objek yang memiliki koleksi Students
dan Student
objek yang memiliki koleksi Classes
. Karena StudentClass
tabel Anda hanya berisi Id dan tidak ada informasi tambahan, EF tidak menghasilkan entitas untuk tabel penggabungan. Itu adalah perilaku yang benar dan itulah yang Anda harapkan.
Sekarang, ketika melakukan penyisipan atau pembaruan, cobalah untuk berpikir dalam kerangka objek. Misalnya jika Anda ingin memasukkan kelas dengan dua siswa, buat Class
objek, Student
objek, tambahkan siswa ke Students
koleksi kelas tambahkan Class
objek ke konteks dan panggil 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();
}
Ini akan membuat entri di Class
tabel, dua entri di Student
tabel dan dua entri di StudentClass
tabel yang menghubungkan keduanya.
Anda pada dasarnya melakukan hal yang sama untuk pembaruan. Ambil saja datanya, ubah grafik dengan menambahkan dan menghapus objek dari koleksi, panggil SaveChanges
. Periksa pertanyaan serupa ini untuk detailnya.
Edit :
Menurut komentar Anda, Anda perlu memasukkan yang baru Class
dan menambahkan dua yang sudah ada 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();
}
Karena kedua siswa sudah ada dalam database, mereka tidak akan disisipkan, tetapi karena mereka sekarang berada dalam Students
kumpulan Class
, dua entri akan disisipkan ke dalam StudentClass
tabel.
Coba yang ini untuk Memperbarui:
sumber
Saya ingin menambahkan pengalaman saya tentang itu. Memang EF, ketika Anda menambahkan objek ke konteks, itu mengubah status semua anak dan entitas terkait menjadi Ditambahkan. Meskipun ada pengecualian kecil dalam aturan di sini: jika anak / entitas terkait dilacak oleh konteks yang sama, EF memahami bahwa entitas ini ada dan tidak menambahkannya. Masalahnya terjadi ketika misalnya, Anda memuat anak-anak / entitas terkait dari beberapa konteks lain atau antarmuka web dll dan kemudian ya, EF tidak tahu apa-apa tentang entitas ini dan pergi dan menambahkan semuanya. Untuk menghindarinya, dapatkan saja kunci dari entitas dan temukan mereka (misalnya
context.Students.FirstOrDefault(s => s.Name == "Alice"))
dalam konteks yang sama di mana Anda ingin melakukan penambahan.sumber
Saya menggunakan cara berikut untuk menangani hubungan banyak-ke-banyak di mana hanya kunci asing yang terlibat.
Jadi untuk memasukkan :
Untuk menghapus ,
sumber
Dalam kerangka entitas, ketika objek ditambahkan ke konteks, statusnya berubah menjadi Ditambahkan. EF juga mengubah status setiap objek untuk ditambahkan dalam pohon objek dan karenanya Anda mendapatkan kesalahan pelanggaran kunci primer atau catatan duplikat ditambahkan dalam tabel.
sumber