En términos de entidades (u objetos), tiene un Classobjeto que tiene una colección de Studentsy un Studentobjeto que tiene una colección de Classes. Dado que su StudentClasstabla solo contiene los ID y ninguna información adicional, EF no genera una entidad para la tabla de unión. Ese es el comportamiento correcto y eso es lo que esperas.
Ahora, cuando haga inserciones o actualizaciones, intente pensar en términos de objetos. Por ejemplo, si desea insertar una clase con dos estudiantes, cree el Classobjeto, los Studentobjetos, agregue los estudiantes a la Studentscolección de la clase , agregue el Classobjeto al contexto y llame 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();
}
Esto creará una entrada en la Classtabla, dos entradas en la Studenttabla y dos entradas en la StudentClasstabla uniéndolas.
Básicamente, haces lo mismo con las actualizaciones. Simplemente obtenga los datos, modifique el gráfico agregando y eliminando objetos de las colecciones, llame SaveChanges. Consulte esta pregunta similar para obtener más detalles.
Editar :
De acuerdo con su comentario, debe insertar uno nuevo Classy agregar dos existentes 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();
}
Dado que ambos estudiantes ya están en la base de datos, no se insertarán, pero como ahora están en la Studentscolección de Class, se insertarán dos entradas en la StudentClasstabla.
Pruebe este para actualizar:
fuente
Quería agregar mi experiencia a eso. De hecho, EF, cuando agrega un objeto al contexto, cambia el estado de todos los elementos secundarios y entidades relacionadas a Agregado. Aunque hay una pequeña excepción en la regla aquí: si los niños / entidades relacionadas están siendo rastreados por el mismo contexto, EF entiende que estas entidades existen y no las agrega. El problema ocurre cuando, por ejemplo, carga los niños / entidades relacionadas de algún otro contexto o una interfaz de usuario web, etc. y luego sí, EF no sabe nada sobre estas entidades y las agrega todas. Para evitar eso, simplemente obtenga las claves de las entidades y búsquelas (por ejemplo,
context.Students.FirstOrDefault(s => s.Name == "Alice"))en el mismo contexto en el que desea hacer la adición.fuente
Utilizo la siguiente forma para manejar la relación de muchos a muchos donde solo están involucradas claves externas.
Entonces para insertar :
Para borrar ,
fuente
En el marco de la entidad, cuando el objeto se agrega al contexto, su estado cambia a Agregado. EF también cambia el estado de cada objeto para agregarlo en el árbol de objetos y, por lo tanto, obtiene un error de violación de clave principal o se agregan registros duplicados en la tabla.
fuente