假设你有两个表,“Users”和“UserRoles”。以下是两个表的结构(表 - 列):
用户 - UserID(int)
UserRoles - UserID(int),Role(string)
我想要的是我的域中的“用户”类具有IList角色。如何构建我的Fluent NHibernate映射来实现这一目标?
答案 0 :(得分:13)
您正在寻找的是一组元素,在标准的hbm映射中是:
<set name="Roles" table="UserRoles">
<key column="UserID" />
<element column="Role" />
</set>
对于Fluent NHibernate,您可以这样映射:
HasMany<string>(x => x.Roles)
.AsElement("Role");
您可能还需要使用WithKeyColumn(string)
指定密钥名称。
答案 1 :(得分:4)
FWIW现在这个变化很小。当前的映射是
HasMany<string>(x => x.Roles)
.Element("Role");
答案 2 :(得分:0)
我相信会是
public User()
{
Id(x => x.UserID);
HasMany<UserRoles>(x => x.UserRoles).AsBag();
}
您还必须确保映射您的用户角色类
答案 3 :(得分:0)
这也有效:
HasMany<Role>(u => u.Roles)
.WithTableName("UserRoles")
.Component(role => role.Map(r => r.Name))
.AsList();
您无需映射Role或UserRoles。
确保角色实施IEquatable < Role > ;.