与EF5有多对多的双向关系

时间:2012-10-16 15:48:12

标签: entity-framework many-to-many fluent

对于用户和角色之间的简单多对多关系,我有以下流畅的配置。我需要双向导航属性,因此有一组角色中的用户,反之亦然。

当我将新实体插入User时,当我使用以下内容映射它时,EF会尝试插入Role_Id列。该列显然是RoleId,而不是Role_Id,而且它位于多对多表中。用户不能有Role_Id。

我想通过在双方都有一个集合,EF会以某种方式变得混乱。

modelBuilder.Entity<User>().HasMany(_ => _.Roles).WithMany()
                        .Map(_ => 
                        {
                            _.MapLeftKey("UserId");
                            _.MapRightKey("RoleId");
                            _.ToTable("UserRole", "dbo");
                        });         

当我尝试以另一种方式创建关系时,通过在上面的配置之后添加以下配置,我得到一个例外,说明已经定义了关系。

modelBuilder.Entity<Role>().HasMany(_ => _.Users).WithMany()
                    .Map(_ =>
                    {
                        _.MapLeftKey("RoleId");
                        _.MapRightKey("UserId");
                        _.ToTable("UserRole", "dbo");
                    });         

1 个答案:

答案 0 :(得分:0)

我认为这很简单,因为这种关系是我必须指定另一条腿的两种方式。

当导航是单向导航时,我的方式有效。当导航有两种方式时,这种方法有效。

modelBuilder.Entity<Role>().HasMany(_ => _.Users).WithMany(_ => _.Roles)
                    .Map(_ =>
                    {
                        _.MapLeftKey("RoleId");
                        _.MapRightKey("UserId");
                        _.ToTable("UserRole", "dbo");
                    });