枚举集合的nHibernate代码映射

枚举集合的nHibernate代码映射,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我刚开始使用nHibernate代码映射,我一直在映射一组枚举 (注意,这个问题类似于但不同于我想使用代码映射进行映射。) 我有一个实体“角色”,它有一组“权限”,这些权限是一个枚举 这方面的旧xml映射是: <set name="Permissions" cascade="none" table="role_permissions"> <key column="role_id" /> <element column="permission_id" type

我刚开始使用nHibernate代码映射,我一直在映射一组枚举

(注意,这个问题类似于但不同于我想使用代码映射进行映射。)

我有一个实体“角色”,它有一组“权限”,这些权限是一个枚举

这方面的旧xml映射是:

<set name="Permissions" cascade="none" table="role_permissions">
  <key column="role_id" />
  <element column="permission_id" type="MyApp.Permissions, MyApp" />
</set>
试试这个

Set(x => x.PermissionCollection, m =>
{
    m.Key(km => km.Column("role_id"));
    m.Table("role_permissions");
},
r => r.Element(e => e.Column("permission_id")));

嗯,这让我通过了初始配置,但是当尝试使用角色实体时,我得到了一个“无效强制转换”异常。这可能是另一个问题,我不确定是哪个属性导致了强制转换异常。您能否提供您的角色类。在我的测试应用程序中,此映射将持续并加载实体,不会出现任何错误。有趣的是,是什么代码引发了这个异常?这很奇怪:当我再次尝试应用程序时,我得到了一个不同的异常。这一次在映射配置期间,我得到“无法确定列的类型:MyApp.Role,MyApp:NHibernate.mapping.Column(id)”。我想你已经给了我第一个问题的答案,但看起来我还有更多的工作要做。它最终成为了我的版本栏-我的代码有“long?”的名称,但配置必须使用int。
Expected type implementing IUserType or IType.
Parameter name: persistentType
Set(x => x.PermissionCollection, m =>
{
    m.Key(km => km.Column("role_id"));
    m.Table("role_permissions");
},
r => r.Element(e => e.Column("permission_id")));