[英]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.