2009-01-11 104 views
8

比方说,你有两个表,“用户”和“UserRoles”。下面是这两个表的结构如何(表 - 列):流利的NHibernate问题

用户 - 用户名(INT)

的UserRole - 用户名(INT),角色(串)

我想是我的“用户“在我的领域有一个IList的角色。我如何构建我的Fluent NHibernate映射来实现这一点?

回答

13

什么你要找的是一组元素,其中的在标准HBM映射:

<set name="Roles" table="UserRoles"> 
    <key column="UserID" /> 
    <element column="Role" /> 
</set> 

对于功能NHibernate,你可以像这样映射的:

HasMany<string>(x => x.Roles) 
    .AsElement("Role"); 

您可能还需要使用WithKeyColumn(string)指定密钥名称。

0

我相信这将是

public User() 
    { 
    Id(x => x.UserID); 
    HasMany<UserRoles>(x => x.UserRoles).AsBag(); 
    } 

你还必须确保你的映射类的UserRole以及

+0

事情是UserRoles不是一个类。这只是一个字符串列表。数据表不链接两个外键,只有一个外键(UserID)和一个角色名称(字符串)。 – 2009-01-11 18:57:53

0

这也工作:

HasMany<Role>(u => u.Roles) 
       .WithTableName("UserRoles") 
       .Component(role => role.Map(r => r.Name)) 
       .AsList(); 

你并不需要映射或角色的UserRole。

确保角色实现IEquatable <Role> ;.

4

FWIW这有改变minorly现今的。目前的映射是

HasMany<string>(x => x.Roles) 
    .Element("Role");