2013-07-10 52 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