En termes d'entités (ou d'objets), vous avez un Class
objet qui a une collection de Students
et un Student
objet qui a une collection de Classes
. Étant donné que votre StudentClass
table ne contient que les Id et aucune information supplémentaire, EF ne génère pas d'entité pour la table de jointure. C'est le comportement correct et c'est ce à quoi vous vous attendez.
Maintenant, lorsque vous faites des insertions ou des mises à jour, essayez de penser en termes d'objets. Par exemple, si vous souhaitez insérer une classe avec deux étudiants, créer l' Class
objet, les Student
objets, ajouter les étudiants à la Students
collection de la classe , ajouter l' Class
objet au contexte et appeler 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();
}
Cela créera une entrée dans le Class
tableau, deux entrées dans le Student
tableau et deux entrées dans le StudentClass
tableau les reliant.
Vous faites essentiellement la même chose pour les mises à jour. Récupérez simplement les données, modifiez le graphique en ajoutant et supprimant des objets des collections, appelez SaveChanges
. Consultez cette question similaire pour plus de détails.
Modifier :
Selon votre commentaire, vous devez en insérer un nouveau Class
et y ajouter deux existants 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();
}
Comme les deux étudiants sont déjà dans la base de données, ils ne seront pas insérés, mais comme ils sont maintenant dans la Students
collection de Class
, deux entrées seront insérées dans la StudentClass
table.