使用数据库第一模型:假设我们有经典的表Student
、Course
和StudentCourse
(后者显然有FK来Student
和Course
)。
如果将此模型导入 EF,则会为每个模型生成一个对象。 Student
类和Course
类各有一个StudentCourses
集合,你需要从中跳转另一个关系才能分别到达Course
或Student
。
我希望以底层交集表不可见的方式生成代码,即 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 关系的表(学生、课程和学生课程)。最重要的是,学生课程将是一个不可见的链接表,在您的模型中没有实体。