C# 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

我对NHibernate很陌生,我有一个关于NHibernate中枚举映射的问题(不流畅…)

枚举是:

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,
…