如何针对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字段进行选择。
答案 0 :(得分:6)
您的类和映射应如下所示:
class MyType
{
public virtual StateEnum State { get; set; }
}
<class name="MyType">
<property name="State" type="MyNamespace.MyEnumUserType, MyDll" />
</class>
NHibernate有3个用于枚举的内置映射器:
(char) (int) enumvalue
。