gpt4 book ai didi

c# - 在 NHibernate 中构造针对 IUserType 的查询

转载 作者:太空狗 更新时间:2023-10-29 21:36:59 25 4
gpt4 key购买 nike

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

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

在我的代码中,我希望它被表示为一个枚举,所以我创建了一个枚举,每个状态都有一个值,并创建了一个 IUserType,它将数据库的 char 值转换为我的枚举,然后返回以进行选择和更新。

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

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

但是,该查询抛出异常:

could not resolve property: State of: MyNamespace.MyType

大概是因为 NHibernate 不知道如何针对给定 StateEnum 类型的数据库的 char 字段进行选择。

最佳答案

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

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) (int) enumvalue 的结果。

关于c# - 在 NHibernate 中构造针对 IUserType 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com