我有一个表学生,另一个主题,第三个表 StudentsSubjects ,而学生和主题表有很多 - 你可以在下面的edmx图中看到很多关系。
然而,VisualStudio 2012中的EDMX文件:
未显示 StudentsSubjects 表 AND
显示警告“StudentsSubjects”没有定义主键,但推断出来了。
我将StudentId
表中的SubjectId
和StudentSubject
定义为仅外键(也不是主键)。我做错了吗?如何修复上面的Visual Studio警告?
答案 0 :(得分:2)
问题#1的行为是设计的 - 假设您的联结表StudentsSubjects
只有2列,是外键StudentId
和SubjectId
,那么EF将隐藏联结表,而是提供Student
和Subject
的一对多导航。 (微软称之为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