EF4.1 CodeFirst:添加字段以连接表

时间:2011-03-16 14:30:59

标签: ef-code-first entity-framework-4.1

我正在使用EF 4.1 RC和CodeFirst / POCO按代码构建我的数据库。

想象一下,像师生一样有多对多的关系(一个教师可以有很多学生,一个学生可能有很多老师)。因此,我有两个POCO:(1)教师和(2)学生。

当EF创建相应的表格时,您最终会得到三个表格:(1)教师,(2)学生和(3)额外的联接表格。连接表恰好包含两个字段:Teacher_ID和Student_ID。

我想知道我是否有机会在连接表中添加额外的字段,例如“年级”(某位老师给某位老师的成绩)?

目前我不知道如何只用两个POCO来实现这一点。

所以我想我能做的就是手动创建第三个POCO(用于连接表),对吗?这肯定会奏效,但后来我失去了很好的导航属性,比如oneTeacher.Students.First()等。这就是为什么我还在寻找另一种方式的主要原因。

3 个答案:

答案 0 :(得分:5)

这是正确的,并且不仅适用于Code-first。如果您的加入表中有额外的字段,您将把它映射为实体。反之亦然,如果您想在加入表中添加额外字段,则需要创建一个新实体,并为Teacher和{{0}}提供零或一对多或一对多导航属性{1}}实体。无论如何,您无法访问StudentTeacher.Students并且必须通过中间实体。

或者,您可以考虑以不同方式对数据库结构进行建模,并将额外信息提取到Student.TeachersTeacher或第四个实体中。但这完全取决于你的情况。

答案 1 :(得分:1)

是的,连接表不能有有效负载,或者您需要将其分解为2个一对多关联,这将导致创建第三个实体来保存PK以及其他属性。

答案 2 :(得分:0)

这是一个我仍然没有时间尝试的想法。也许您可以按原样保留您的学生和教师课程,并添加第三个POCO StudentGrade,其中包含StudentTeacherGrade。然后,您必须使用流畅的API来确保StudentTeacher以及StudentGrade类之间的多对多关系映射到同一个表。

希望有所帮助