繁体   English   中英

与查找表实体框架的多对多关系

[英]Many to Many Relation with Lookup table Entity Framework

我正在尝试使用查找表创建多对多关系。 假设我有一个表“ Course”,其中有3个可能的课程:

Course
Id | Name
1  | History
2  | Maths
3  | Science

我还有另一个学生表,将在其中创建学生,例如:

Student
Id | Name

我有一个映射表,它是StudentCourse:

StudentCourse
ID | StudentId | CourseId
1  |   1       | 3

这是我的学生与课程课程:

public class Student : Entity<Student,int>
{
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course : Entity<Course,int>
{
    public virtual ICollection<Student> Student { get; set; }
}

最后,这是配置代码:

   modelBuilder.Entity<Student>()
                .HasMany<Course>(s => s.Courses)
                .WithMany(c => c.Students)
                .Map(cs =>
                        {
                            cs.MapLeftKey("StudentId");
                            cs.MapRightKey("CourseId");
                            cs.ToTable("StudentCourse");
                        });

当我从视图创建“学生”实体时,用户从“课程”表中选择课程并将其发送到实体框架,EF应该仅输入“学生”和“学生课程”表。

但是在我的情况下,课程表正在为所选课程获取新条目。 因此,我最终在课程表中找到了重复项。

我该如何告诉实体框架不要在“课程表”中输入条目,因为它已经具有所有可能的课程……请帮助!

问题是我在表示层中填充了对象,因此工作单元下的dbcontext不了解嵌套的对象。这就是为什么即使它已经存在,它也总是尝试重新创建课程的原因。 要解决此问题,请在同一工作单元dbcontext下填充Course对象。

例如:

  student.Course = UnitOfWork.Repository.FindById(id);
  var model = UnitOfWork.Repository.Add(student);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM