In Bezug auf Entitäten (oder Objekte) haben Sie ein Class
Objekt mit einer Sammlung von Students
und ein Student
Objekt mit einer Sammlung von Classes
. Da Ihre StudentClass
Tabelle nur die IDs und keine zusätzlichen Informationen enthält, generiert EF keine Entität für die Verknüpfungstabelle. Das ist das richtige Verhalten und das erwarten Sie.
Versuchen Sie nun beim Einfügen oder Aktualisieren, in Objekten zu denken. Wenn Sie beispielsweise eine Klasse mit zwei Schülern einfügen möchten, erstellen Sie das Class
Objekt, die Student
Objekte, fügen Sie die Schüler zur Klassensammlung hinzu Students
, fügen Sie das Class
Objekt zum Kontext hinzu und rufen Sie auf 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();
}
Dadurch wird ein Eintrag in der Class
Tabelle erstellt, zwei Einträge in der Student
Tabelle und zwei Einträge in der StudentClass
Tabelle, die sie miteinander verbinden.
Grundsätzlich tun Sie dasselbe für Updates. Rufen Sie einfach die Daten ab, ändern Sie das Diagramm, indem Sie Objekte zu Sammlungen hinzufügen und daraus entfernen SaveChanges
. Überprüfen Sie diese ähnliche Frage für Details.
Bearbeiten :
Gemäß Ihrem Kommentar müssen Sie eine neue einfügen Class
und zwei vorhandene hinzufügen 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();
}
Da sich beide Schüler bereits in der Datenbank befinden, werden sie nicht eingefügt. Da sie sich jedoch jetzt in der Students
Sammlung der befinden Class
, werden zwei Einträge in die StudentClass
Tabelle eingefügt .
Versuchen Sie dies zum Aktualisieren:
quelle
Ich wollte meine Erfahrung dazu hinzufügen. In der Tat ändert EF beim Hinzufügen eines Objekts zum Kontext den Status aller untergeordneten und verwandten Entitäten in Hinzugefügt. Obwohl die Regel hier eine kleine Ausnahme enthält: Wenn die untergeordneten / verwandten Entitäten im selben Kontext verfolgt werden, versteht EF, dass diese Entitäten vorhanden sind, und fügt sie nicht hinzu. Das Problem tritt auf, wenn Sie beispielsweise die untergeordneten / verwandten Entitäten aus einem anderen Kontext oder einer Web-Benutzeroberfläche usw. laden und dann, ja, EF nichts über diese Entitäten weiß und alle hinzufügt. Um dies zu vermeiden, holen Sie sich einfach die Schlüssel der Entitäten und suchen Sie sie (z. B.
context.Students.FirstOrDefault(s => s.Name == "Alice"))
in demselben Kontext, in dem Sie die Addition durchführen möchten.quelle
Ich verwende die folgende Methode, um die Viele-zu-Viele-Beziehung zu behandeln, bei der nur Fremdschlüssel beteiligt sind.
Also zum Einfügen :
Zum Löschen ,
quelle
Wenn im Entitätsframework ein Objekt zum Kontext hinzugefügt wird, ändert sich sein Status in Hinzugefügt. EF ändert auch den Status jedes Objekts, um es im Objektbaum hinzuzufügen. Daher wird entweder ein Fehler bei der Verletzung des Primärschlüssels angezeigt oder es werden doppelte Datensätze in die Tabelle aufgenommen.
quelle