如果用户有多个位置 如果用户只有一个角色。 我的桌子设计就像
TableUser
Userid (pk)
Username
RoleId (fk)
TableRole
RoleId (pk)
RoleName
TableLocation
LocationId (pk)
LocationName
用户位置
LocationId (fk) (part of composite pk)
Userid (fk)(part of composite pk)
我有实体框架4.0。
当我获取用户实体时,用户实体没有带有Role对象。 但它确实有一个Location对象。 为什么这样? 它是实体框架的默认行为吗? 它默认只支持一对多关系吗?
答案 0 :(得分:0)
是的,EF不支持以这种方式建模的一对一关系。要在数据库中强制执行此关系,必须使用唯一索引/约束标记数据库中的RoleId
。 EF不支持唯一键,因此无法将此关系建模为一对一。在EF中建立一对一关系的唯一方法是在主键之上:
Role - PK RoleId
User - PK, FK UserId
这意味着代替User.RoleId
,您将User.UserId
用作Role
的FK。
如果要保留当前结构,则必须使其成为一对多关系(一个角色可以包含许多用户),不要在Users
上公开Role
导航属性并放置数据库的唯一键。它仍然允许您将多个用户分配给应用程序中的单个角色,但如果您尝试保存,数据库将触发异常。