【问题标题】:nHibernate code mapping for enum collection枚举集合的 nHibernate 代码映射
【发布时间】:2012-02-15 03:11:07
【问题描述】:

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

(注意,这个问题类似于Mapping collection of enum in 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 => { },
  r => r.Element(e =>
  {
    e.Column("permission_id");
    e.Type<Permissions>();
  }));

抛出的异常是

Expected type implementing IUserType or IType.
Parameter name: persistentType

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    试试这个

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

    【讨论】:

    • 嗯,这让我通过了初始配置,但是当我尝试使用 Role 实体时,我得到了一个“Invalid Cast”异常。这可能是一个不同的问题,我不确定哪个属性导致了强制转换异常。
    • 你能提供你的角色类吗?
    • 在我的测试应用程序中,此映射持续存在并加载实体而没有任何错误。有趣的是,什么代码抛出了这个异常?
    • 这很奇怪:当我再次尝试该应用程序时,我得到了一个不同的异常。这次在映射配置期间,我得到“无法确定类型:MyApp.Role,MyApp,列:NHibernate.Mapping.Column(id)”。我想你已经给了我第一个问题的答案,但看起来我还有一些工作要做。
    • 它最终成为我的版本列 - 我的代码将它作为“长?”但配置一定是在尝试使用 int。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多