2013-07-10 51 views
1

我有一个表学生,另一个主题,第三台StudentsSubjects,以及学生和主题表有许多一对多的关系,你可以在下面的EDMX图中看到的。多对多关系,EDMX显示没有主键警告?

然而,EDMX文件中的VisualStudio 2012:

  1. 不显示StudentsSubjects

  2. 显示一个警告“StudentsSubjects” 不具有主关键定义,但它被推断。

enter image description here

我在StudentSubject表作为外键定义既StudentIdSubjectId只(不作为主键以及)。我做错了吗?我如何解决上面的Visual Studio警告?

+0

见除了StudentId和SubjectId在StudentSubject表中,乳清不添加一个自动递增的int列,例如RecordID并使其成为标识列/ PrimaryKey – StackTrace

+0

@ SQL.NETWarrior,这很有趣,是标准/良好实践吗? –

回答

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