假设您有两个表,“Users”和“UserRoles”。以下是这两个表的结构(表 - 列):
用户 - 用户 ID (int)
UserRoles - UserID (int), Role (string)
我想要的是我的域中的“用户”类拥有一个 IList 角色。如何构建我的 Fluent NHibernate 映射来实现这一点?
假设您有两个表,“Users”和“UserRoles”。以下是这两个表的结构(表 - 列):
用户 - 用户 ID (int)
UserRoles - UserID (int), Role (string)
我想要的是我的域中的“用户”类拥有一个 IList 角色。如何构建我的 Fluent NHibernate 映射来实现这一点?
您正在寻找的是一组元素,在标准 hbm 映射中是:
<set name="Roles" table="UserRoles">
<key column="UserID" />
<element column="Role" />
</set>
对于 Fluent NHibernate,您可以像这样映射:
HasMany<string>(x => x.Roles)
.AsElement("Role");
您可能还需要使用WithKeyColumn(string)
.
FWIW 这在今天发生了微小的变化。当前映射是
HasMany<string>(x => x.Roles)
.Element("Role");
我相信它会是
public User()
{
Id(x => x.UserID);
HasMany<UserRoles>(x => x.UserRoles).AsBag();
}
您还必须确保映射您的 UserRoles 类
这也有效:
HasMany<Role>(u => u.Roles)
.WithTableName("UserRoles")
.Component(role => role.Map(r => r.Name))
.AsList();
您不需要映射角色或用户角色。
确保角色实现IEquatable < Role > ;.