我在非关系型数据库中有三个表:
roles_users
是一个查找表,其中包含users
和roles
在我的代码中,我为所有这三个表创建了必要的实体类:
users
[Table("users")]
public class User
: AuditableEntity<int>
{
[Key]
[Display(Name = "Id")]
public int id { get; set; }
[Display(Name = "User Name")]
[Required]
public string login { get; set; }
[Display(Name = "Name")]
[Required]
public string name { get; set; }
**public virtual ICollection<UserRole> UserRole { get; set; }**
}
和roles
[Table("roles")]
public class Role
: Entity<int>
{
[Key]
[Display(Name = "Id")]
public int id { get; set; }
[Display(Name = "Role")]
public string name { get; set; }
**public virtual ICollection<UserRole> UserRole { get; set; }**
}
和roles_users
[Table("roles_users")]
public class UserRole
: Entity<int>
{
[Key]
[ForeignKey("Role")]
public int role_id { get; set; }
[Key]
[ForeignKey("User")]
public int user_id { get; set; }
public virtual User User { get; set; }
public virtual Role Role { get; set; }
}
我正在尝试将角色表添加到users表中,以便我可以检索用户的关联角色,并且根据我的阅读,ForeignKey
应放在role_id
上根据上面发布的代码,将UserRoles(roles_users)类映射到两个表上,并且user_id
,但这不起作用。
非常感谢任何见解。
更新
我没有使用Visual Studio生成这些实体类,并且不想。
更新2
我现在在多重性
上收到以下错误UserRole_Role_Source :: Multiplicity在Role中无效 'UserRole_Role'中的'UserRole_Role_Source'。因为 依赖角色属性不是关键属性,即上限 依赖角色的多样性必须是'*'。
更新3
我明白了,UserRole
和User
中Role
的多样性应该是一个集合,因为它是多对多的关系,即使它不是,所以我根据上面代码中突出显示的块更改了代码。
答案 0 :(得分:1)
您将其设计为多对多关系。
如果您不希望它是多对多关系,那么您可以删除联合表并将role_id列作为角色的外键直接添加到users表。无论如何,你仍然需要在类Role上使用UserID的Collection。
如果您的用户一次只能拥有一个角色,那么联合表就会过度工程化。