【问题标题】:Constructing query against IUserType in NHibernate在 NHibernate 中构造针对 IUserType 的查询
【发布时间】:2010-03-08 16:09:56
【问题描述】:

如何针对 NHibernate 中的自定义 IUserType 字段构造查询?

更具体地说: 我正在开发一个棕地应用程序。我在数据库中有一个名为“State”的字段,其中包含一个表示给定对象所处状态的字符。

在我的代码中,我希望将其表示为一个枚举,因此我为每个状态创建了一个包含一个值的枚举,并创建了一个 IUserType,它可以从 db 的 char 值转换为我的枚举,然后返回用于选择和更新。

我想构造一个如下所示的查询:

session.CreateCriteria<MyType>().Add(Expression.Eq("State", StateEnum.Complete))

但是,该查询会引发异常:

could not resolve property: State of: MyNamespace.MyType

大概是因为 NHibernate 不知道如何在给定 StateEnum 类型的情况下对 DB 的 char 字段进行选择。

【问题讨论】:

  • 请发布您的映射
  • 那个错误信息听起来像你没有映射属性 MyType.State

标签: c# nhibernate iusertype


【解决方案1】:

您的类和映射应如下所示:

class MyType
{
    public virtual StateEnum State { get; set; }
}

<class name="MyType">
    <property name="State" type="MyNamespace.MyEnumUserType, MyDll" />
</class>

NHibernate 有 3 个内置的枚举映射器:

  • PersistentEnumType 映射到一个 int 列,并且未在映射中声明。
  • EnumStringType 映射到 varchar 列。这些值是枚举的 ToString() 值。
  • EnumCharType 映射到一个 char 列。这些值是(char) (int) enumvalue 的结果。

【讨论】:

  • 原来是我的配置输入错误,但你做对了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多