在NHibernate中构造针对IUserType的查询

时间:2010-03-02 22:32:51

标签: c# nhibernate iusertype

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

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

在我的代码中,我希望将它表示为枚举,因此我创建了一个带有每个状态值的枚举,并创建了一个IUserType,它将db的char值转换为我的枚举,然后返回选择&更新。

我想构建一个看起来像这样的查询:

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

但是,该查询会抛出异常:

could not resolve property: State of: MyNamespace.MyType

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

1 个答案:

答案 0 :(得分: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
  • 的结果