首页 > 其他 > 详细

EF关系配置之N:N关系

时间:2016-03-14 13:44:44      阅读:187      评论:0      收藏:0      [点我收藏+]

  上文中以User实体类和Role实体类为例,构建了User-Role的多对一关系,本文中,仍以该框架,配置User与Role的多对多关系,以记录二者的不同。

      上文提到,一对多关系的配置既可以通过OnModelConfiguration方法的重写进行配置,也可直接在实体类中定义进行配置,而在多对多关系的配置中,实体类定义的方法便不再可用。原因很简单,多对多关系的定义对数据库产生的变化并非在表内部,而在于新增一个映射关系表(eg:UserRole),在新增的表内以组合主键的形式记录两个实体之间的多对多关联。因此只能在Configuration文件中进行定义多对多关联。

一、默认配置下的定义方式

         默认配置即是指既不定义新增映射表的名称,也不定义该表内字段名,只定义多对多关系,完全由EF自动生成新增表的所有定义。这种配置方式只需要在Configuration中使用HasMany等语句即可。

 

   技术分享

 

        如图所示,最后一行语句即为多对多关系的定义。也可在Role表中使用同样的方式进行关系的配置。

        以此种方式生成的关系表,将以HasMany方法中所指向的实体名在前,WithMany方法指向的实体名在后的形式生成表名,以图示为例,则将生成映射关系表RoleUsers,其中Role_ID列在左,User_ID列在右。

        当自定义映射表名和字段时,语法如下图所示:

 

   技术分享

        图中,.Map方法即是标识映射表的配置代码,.ToTable配置映射表名称,.MapLeftKey即表示User表的主键对应到映射表中的名称,而.MapRightKey则表示另一个实体类的主键对应到映射表中的字段名称。在哪个实体内定义,则该实体的主键对应映射表中的左边的列,因此在配置字段名映射关系时切忌顺序胡乱安置。若按下图配置,则会出现问题。

   技术分享

         按此图所示,生成的映射表为UserRole表,左边列为UserId,右边列为RoleId,但在实际存储数据进行映射时,将出现如下情况:

   技术分享

       即实体类中的RoleId被映射到UserRole表中的UserId列,实体类中的UserId反被映射到UserRole表中的RoleId列。因此配置的顺序要尤为注意。

EF关系配置之N:N关系

原文:http://www.cnblogs.com/cleverJoe/p/5275317.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!