我有一个名为User的类。用户可以拥有一个或多个角色,在位掩码枚举中定义。用户有一个Role属性,我可以通过以下方式使用:
user.Roles = Roles.User | Roles.Other;
在数据库中,我有一个Users表和一个User_Roles表。对于用户拥有的每个角色,我想将其存储在Users_Roles表中,其中包含UserID和Role的字符串表示形式。例如,为前一个示例存储的数据将是:
User_Roles
---
UserID Role
23 User
23 Other
我将如何在此创建映射?我已经阅读了这些示例,他们似乎都将它直接映射到User表。
答案 0 :(得分:0)
NHibernate不会将单个值映射到表,但您可以在枚举上使用Linq-to-object投影:
protected virtual ICollection<Roles> RolesCollection
{
get
{
return Enum.GetValues(typeof(Roles))
.Cast<Roles>()
.Where(r => (r & Roles) == r)
.ToList();
}
set
{
Roles = value.Aggregate((r1, r2) => r1 | r2);
}
}
然后将其映射为一组:
<set name="RolesCollection" table="User_Roles">
<key column="UserID" />
<element type="Roles" /><!--you might have to qualify the type-->
</set>
如您所见,您甚至不需要公开集合属性,因此这对您的应用程序的其余部分是透明的。