Many to Many
En Entity Framework Core, para modelar una relación muchos a muchos (Many-to-Many), necesitarás una tabla intermedia que asocie las dos entidades. Aquí hay un ejemplo de cómo puedes implementar esto con dos entidades Student
y Course
, que tienen una relación muchos a muchos:
- Clase
Student
:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public ICollection<StudentCourse> StudentCourses { get; set; }
}
- Clase
Course
:
public class Course
{
public int CourseId { get; set; }
public string Title { get; set; }
public ICollection<StudentCourse> StudentCourses { get; set; }
}
- Clase
StudentCourse
(Tabla Intermedia):
public class StudentCourse
{
public int StudentId { get; set; }
public Student Student { get; set; }
public int CourseId { get; set; }
public Course Course { get; set; }
}
- Configuración del Contexto:
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DbSet<StudentCourse> StudentCourses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Configuración de la clave primaria compuesta en la tabla intermedia
modelBuilder.Entity<StudentCourse>()
.HasKey(sc => new { sc.StudentId, sc.CourseId });
// Configuración de las relaciones muchos a muchos
modelBuilder.Entity<StudentCourse>()
.HasOne<Student>(sc => sc.Student)
.WithMany(s => s.StudentCourses)
.HasForeignKey(sc => sc.StudentId);
modelBuilder.Entity<StudentCourse>()
.HasOne<Course>(sc => sc.Course)
.WithMany(c => c.StudentCourses)
.HasForeignKey(sc => sc.CourseId);
}
}
Con este modelo:
- La entidad
Student
tiene una colección deStudentCourse
, que representa los cursos en los que está inscrito un estudiante. - La entidad
Course
tiene una colección deStudentCourse
, que representa los estudiantes que están inscritos en un curso. - La entidad
StudentCourse
tiene las claves foráneas que apuntan a las entidadesStudent
yCourse
.
Cuando configuras el modelo en el contexto, debes definir la relación muchos a muchos utilizando la tabla intermedia StudentCourse
. En el ejemplo anterior, se establece una clave primaria compuesta y se configuran las relaciones correspondientes.
Puedes utilizar este modelo para acceder a los estudiantes que están inscritos en un curso y a los cursos en los que está inscrito un estudiante.
https://learn.microsoft.com/en-us/ef/core/modeling/relationships/many-to-many
https://www.entityframeworktutorial.net/efcore/configure-many-to-many-relationship-in-ef-core.aspx