比方说,你有两个表,“用户”和“UserRoles”。下面是这两个表的结构如何(表 - 列):流利的NHibernate问题
用户 - 用户名(INT)
的UserRole - 用户名(INT),角色(串)
我想是我的“用户“在我的领域有一个IList的角色。我如何构建我的Fluent NHibernate映射来实现这一点?
比方说,你有两个表,“用户”和“UserRoles”。下面是这两个表的结构如何(表 - 列):流利的NHibernate问题
用户 - 用户名(INT)
的UserRole - 用户名(INT),角色(串)
我想是我的“用户“在我的领域有一个IList的角色。我如何构建我的Fluent NHibernate映射来实现这一点?
什么你要找的是一组元素,其中的在标准HBM映射:
<set name="Roles" table="UserRoles">
<key column="UserID" />
<element column="Role" />
</set>
对于功能NHibernate,你可以像这样映射的:
HasMany<string>(x => x.Roles)
.AsElement("Role");
您可能还需要使用WithKeyColumn(string)
指定密钥名称。
我相信这将是
public User()
{
Id(x => x.UserID);
HasMany<UserRoles>(x => x.UserRoles).AsBag();
}
你还必须确保你的映射类的UserRole以及
这也工作:
HasMany<Role>(u => u.Roles)
.WithTableName("UserRoles")
.Component(role => role.Map(r => r.Name))
.AsList();
你并不需要映射或角色的UserRole。
确保角色实现IEquatable <Role> ;.
FWIW这有改变minorly现今的。目前的映射是
HasMany<string>(x => x.Roles)
.Element("Role");
事情是UserRoles不是一个类。这只是一个字符串列表。数据表不链接两个外键,只有一个外键(UserID)和一个角色名称(字符串)。 – 2009-01-11 18:57:53