2014-05-22 146 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