实体框架是否可以在没有交集对象的情况下处理多对多关系



使用数据库第一模型:假设我们有经典的表StudentCourseStudentCourse(后者显然有FK来StudentCourse)。

如果将此模型导入 EF,则会为每个模型生成一个对象。 Student类和Course类各有一个StudentCourses集合,你需要从中跳转另一个关系才能分别到达CourseStudent

我希望以底层交集表不可见的方式生成代码,即 Student有一个Courses的集合,Course有一个Students的集合。 我已经在其他ORM软件(特别是TopLink)中看到了这一点。 可以在 EF 中完成吗?

根据本教程,如果您的StudentCourse表仅包含外键列,您将获得所需的行为。如果它包含任何其他列,EF 将生成一个中间实体来表示联接。

在这种情况下,从StudentCourse表中删除代理项键并将其替换为复合主键应该有效。

可以使用 ICollections 在 EF Code First 中执行此操作。例如:

public class Student 
{ 
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
    public Student()
    {
        Courses = New HashSet<Course>();
    }
}

重复课程并将其全部交换。这将在数据库中创建三个具有 m 到 m 关系的表(学生、课程和学生课程)。最重要的是,学生课程将是一个不可见的链接表,在您的模型中没有实体。

相关内容

  • 没有找到相关文章

最新更新