Pod względem bytów (lub obiektów) masz Class
obiekt, który ma kolekcję Students
i Student
obiekt, który ma kolekcję Classes
. Ponieważ StudentClass
tabela zawiera tylko identyfikatory i nie zawiera dodatkowych informacji, EF nie generuje jednostki dla tabeli łączącej. To jest właściwe zachowanie i tego właśnie oczekujesz.
Teraz, robiąc wstawki lub aktualizacje, staraj się myśleć kategoriami obiektów. Np. Jeśli chcesz wstawić klasę z dwoma uczniami, utwórz Class
obiekt, Student
obiekty, dodaj uczniów do Students
kolekcji klas, dodaj Class
obiekt do kontekstu i wywołaj 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();
}
Spowoduje to utworzenie wpisu w Class
tabeli, dwóch wpisów w Student
tabeli i dwóch wpisów w StudentClass
tabeli łączących je ze sobą.
Zasadniczo robisz to samo w przypadku aktualizacji. Wystarczy pobrać dane, zmodyfikować wykres, dodając i usuwając obiekty z kolekcji, zadzwoń SaveChanges
. Sprawdź to podobne pytanie, aby uzyskać szczegółowe informacje.
Edycja :
Zgodnie z Twoim komentarzem musisz wstawić nowy Class
i dodać Students
do niego dwa istniejące :
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();
}
Ponieważ obaj uczniowie są już w bazie danych, nie zostaną wstawieni, ale ponieważ znajdują się teraz w Students
kolekcji Class
, do StudentClass
tabeli zostaną wstawione dwa wpisy .