6

如何针对 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 类型的情况下对数据库的 char 字段进行选择。

4

1 回答 1

6

您的类和映射应类似于以下内容:

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
于 2010-03-08T08:09:56.793 回答