C# NHibernate枚举集合映射
我对NHibernate很陌生,我有一个关于NHibernate中枚举映射的问题(不流畅…) 枚举是:C# NHibernate枚举集合映射,c#,nhibernate,enums,C#,Nhibernate,Enums,我对NHibernate很陌生,我有一个关于NHibernate中枚举映射的问题(不流畅…) 枚举是: public enum Setting { CreateUser, CreateRole, UpdateUser, UpdateRole, ... } 我还有一个名为“Role”的类,它有三个属性: public class Role { long ID; string Name; ICollection<Setting
public enum Setting
{
CreateUser,
CreateRole,
UpdateUser,
UpdateRole,
...
}
我还有一个名为“Role”的类,它有三个属性:
public class Role
{
long ID;
string Name;
ICollection<Setting> Settings;
}
到目前为止,我说得对吗?有人能帮我把这个和NHibernate联系起来吗
到目前为止,,
谢谢
编辑1:
使用单独的枚举类(ID、名称和许多静态方法)解决了这个问题。之后,我实现了设置和角色之间的多对多关系。我认为-我还没有测试-您可以将设置集合映射为:
<class name="Role" table="Role">
<id name="ID" column="ID">
<generator ... />
</id>
<property name="Name" column="Name"/>
<set name="Settings table="Ref Table">
<key column="Role_ID" />
<element column="Setting_ID" type="int" />
</set>
</class>
您可以考虑使用EnUM <代码> FraseAtgult< /C>和位掩码操作。
您将NHibernate映射到一个私有或受保护的整数字段,并且您的类将公开一个公共属性,该属性表示从标志读取的设置值的集合
如果您不熟悉标记属性
,请访问
基本上,它是这样工作的:
CreateUser = 1,
CreateRole = 2,
UpdateUser = 4,
UpdateRole = 8,
…
这些值可以任意组合并表示为整数。例如,具有CreateUser和UpdateUser权限的用户的值为5,这不能由任何其他设置组合表示
在我看来,这种方法是两全其美的:
- 对于数据库和NHibernate,只有一个整数列——没有额外的表,没有外键,没有集合,没有联接
- 代码中的公共接口保持干净——其他类不公开或要求任何位掩码操作
这种方法不好的场景是需要通过设置来查询的,例如“用UpDeDelOLE设置选择所有用户”
这也是我考虑的一个选项。如果我使用一组大约100个设置,这是否可行?@user1663907不,你会使32位整数溢出。这就是我所想的。。。你能想到其他的解决方案吗?在这种情况下,它们不会是Thema数据库中的seperste表,对吗?
CreateUser = 1,
CreateRole = 2,
UpdateUser = 4,
UpdateRole = 8,
…