entity framework可以在没有交集对象的情况下处理多对多关系吗?

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

如果将此模型导入EF,您将获得为每个模型生成的对象。 StudentCourse课程将分别包含一系列Student Course ,您需要跳过另一个关系,分别到达CourseStudent

我希望生成的代码能够使底层交集表不可见,即Student有一个Courses集合, Course有一个Student集合。 我在其他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 Courses { get; set; } public Student() { Courses = New HashSet(); } } 

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