entity framework可以在没有交集对象的情况下处理多对多关系吗?
使用数据库第一模型:假设我们有经典表格Student
, Course
和StudentCourse
(后者显然有FKs给Student
和Course
)。
如果将此模型导入EF,您将获得为每个模型生成的对象。 Student
和Course
课程将分别包含一系列Student
Course
,您需要跳过另一个关系,分别到达Course
或Student
。
我希望生成的代码能够使底层交集表不可见,即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将是一个隐形链接表,在您的模型中没有实体。