对于用户和角色之间的简单多对多关系,我有以下流畅的配置。我需要双向导航属性,因此有一组角色中的用户,反之亦然。
当我将新实体插入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");
});
答案 0 :(得分:0)
我认为这很简单,因为这种关系是我必须指定另一条腿的两种方式。
当导航是单向导航时,我的方式有效。当导航有两种方式时,这种方法有效。
modelBuilder.Entity<Role>().HasMany(_ => _.Users).WithMany(_ => _.Roles)
.Map(_ =>
{
_.MapLeftKey("RoleId");
_.MapRightKey("UserId");
_.ToTable("UserRole", "dbo");
});