2011-03-16 26 views
4

我正在使用EF 4.1 RC和CodeFirst/POCO通过代码构建我的数据库。想象一下,像教师 - 学生一样有多对多的关系(一个教师可以有很多学生,一个学生可能有很多教师)。因此,我有两个POCO:(1)教师和(2)学生。EF4.1 CodeFirst:添加字段连接表

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

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

目前我不知道如何实现这与只有两个POCO。

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

回答

5

这是正确的,不仅适用于Code-first。如果你的连接表中有额外的字段,你将它映射为一个实体。反之亦然,如果您需要在连接表中添加一个字段,则需要创建一个新实体并对TeacherStudent实体具有零或一对多或一对多导航属性。在任何情况下,您都会失去访问Teacher.StudentsStudent.Teachers的舒适感,并且必须通过中间实体。

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

+0

好的,谢谢你们!和我想的一样。只是想确定我没有错过某种隐藏功能;-) – Ingmar 2011-03-16 14:56:24

1

是的,连接表不能有一个有效载荷,或者你需要将它分解成一对多关联,这将导致创建第三个实体来保存PK以及附加属性。

0

这是一个想法,我还没有时间尝试一下。也许你可以保留你的学生和老师班级,并添加第三个POCO StudentGrade与属性Student,TeacherGrade。然后你必须使用流利的API来确保StudentTeacherStudentGrade类之间的多对多关系映射到同一个表。

希望有帮助