2014-05-22 143 views
0

我已經習慣了這種慣例開始前與實體框架/ MVC的工作:實體框架多對多列概念

tblMyItem (id, id_lookup1, val2, val3, val4...) - 單一,通用表格
tblkLookup1 (id, val1, val2,...) - 一對多的關係表
tblmMyItemLookup2 (id, id_myitem, id_lookup2) - 多對多關係表。

最近我在網上發現,在使用實體框架時,在tblmMyItemLookup2中創建id列並不好,但我無法找到關於該列的更多信息。誰能解釋一下,爲什麼這麼重要?

回答

1

當設計基於僅有2個外鍵列的中間表(Student2Teacher)的多關係(即學生 - 教師)時,最終會得到具有導航屬性而沒有中間表的實體(不會有實體

Student.Teachers <- EntityCollection<Teacher> 
Teacher.Students <- EntityCollection<Student> 

同時,如果你添加任何額外的字段到你的中間表,你必須導航屬性指向中間實體:

Student.Student2Teacher 
Teacher.Student2Teacher 

讓您在上下文表在所有)創建查詢無用的莫e複雜

+0

所以,糾正我,如果我錯了,但除了這兩個外鍵添加額外的列將在模型中創建一個不需要的表,而不是創建一個更容易編碼的其他類的集合? –

+0

對,你是。上下文中還有一個實體。並通過許多2人通過中間實體導航:「Student.Student2Teacher.Teachers」 – Andrew

1

一般來說,我們使用查找表來管理兩個不同表中具有多對多關係的關聯記錄。例如,讓我們有三個表格:學生,教授和學生教授。因爲,一個學生可以參加由許多教授提供服務的課程,而一位教授可以教一個以上的學生,這顯然是一種多對多的關係。因此,名爲StudentsProfessors的查找表用於將學生與其教授匹配,反之亦然。現在,查找表的每個記錄都使用一個id是沒有意義的。我們不打算在任何地方使用這個號碼。我們只需要知道studentId = 10的學生與(1,2,4,9)中帶有ID的教授關聯。只是,而不是在查找表中記錄的ID。

+0

我剛纔發現,使用ID列的原因是爲表做索引,這是毫無意義的。 –

+0

是的。其實,在我使用EF 4的情況下,我遇到了一些問題。然後我刪除了ID列,問題就解決了。有點瘋狂,但發生了:) – Christos

+1

複合鍵完成這項工作 – Andrew