ในแง่ของหน่วยงาน (หรือวัตถุ) คุณมีClass
วัตถุที่มีคอลเลกชันของStudents
และวัตถุที่มีคอลเลกชันของStudent
Classes
เนื่องจากStudentClass
ตารางของคุณมีเฉพาะรหัสและไม่มีข้อมูลเพิ่มเติม EF จึงไม่สร้างเอนทิตีสำหรับตารางการเข้าร่วม นั่นคือพฤติกรรมที่ถูกต้องและนั่นคือสิ่งที่คุณคาดหวัง
ตอนนี้เมื่อทำการแทรกหรืออัพเดตพยายามคิดในแง่ของวัตถุ เช่นถ้าคุณต้องการแทรกชั้นเรียนที่มีนักเรียนสองคนสร้าง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
ตารางสองรายการในStudent
ตารางและสองรายการในStudentClass
ตารางที่เชื่อมโยงเข้าด้วยกัน
โดยพื้นฐานแล้วคุณจะทำเช่นเดียวกันสำหรับการอัปเดต SaveChanges
เพียงแค่ดึงข้อมูลปรับเปลี่ยนกราฟโดยการเพิ่มและลบวัตถุจากคอลเลกชันโทร ตรวจสอบคำถามที่คล้ายกันนี้เพื่อดูรายละเอียด
แก้ไข :
ตามความคิดเห็นของคุณคุณต้องแทรกใหม่Class
และเพิ่มสองรายการที่มีอยู่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
ข้อมูลทั้งสองรายการจะถูกแทรกลงในStudentClass
ตาราง