多对多关系,EDMX显示没有主要警告?

时间:2013-07-10 11:40:04

标签: c# sql visual-studio entity-framework

我有一个表学生,另一个主题,第三个表 StudentsSubjects ,而学生和主题表有很多 - 你可以在下面的edmx图中看到很多关系。

然而,VisualStudio 2012中的EDMX文件:

  1. 未显示 StudentsSubjects AND

  2. 显示警告“StudentsSubjects”没有定义主键,但推断出来了。

  3. enter image description here

    我将StudentId表中的SubjectIdStudentSubject定义为仅外键(也不是主键)。我做错了吗?如何修复上面的Visual Studio警告?

1 个答案:

答案 0 :(得分:2)

问题#1的行为是设计的 - 假设您的联结表StudentsSubjects只有2列,是外键StudentIdSubjectId,那么EF将隐藏联结表,而是提供StudentSubject的一对多导航。 (微软称之为Pure Join Table)。

要使此EF N:N行为起作用,联结表中不允许其他列,甚至不是简单的代理键(如@SQL.Net Warrior所示)。

为了避免问题#2中的警告,联结表的主键因此需要是复合键(StudentId, SubjectId),即

ALTER TABLE StudentsSubjects 
ADD CONSTRAINT PK_StudentsSubjects
PRIMARY KEY (StudentId, SubjectId);

另见How to set up a many-to-many relationship in Entity Framework designer thingy