1

我有一个表Students和另一个Subjects,还有第三张表StudentsSubjects ,并且 Student 和 Subjects 表具有多对多的关系,如下面的 edmx 图表所示。

但是,VisualStudio 2012 中的 EDMX 文件:

  1. 不显示StudentSubjects

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

在此处输入图像描述

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

4

1 回答 1

2

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

要使这种 EF N:N 行为起作用,联结表中不允许有其他列,甚至不允许使用简单的代理键(如 建议的那样@SQL.Net Warrior)。

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

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

另请参阅如何在实体框架设计器中建立多对多关系

于 2013-10-20T14:53:15.003 回答