gpt4 book ai didi

nhibernate - Linq to NHibernate 查询比较枚举映射为整数成功,但作为等效条件查询失败

转载 作者:行者123 更新时间:2023-12-01 01:23:31 25 4
gpt4 key购买 nike

我正在查询 ProductRisk,它包含一个 Status 属性,其中 Status 是一个枚举。以下是 ProductRisk 的映射:

public class ProductRiskMap : ClassMap<ProductRisk>
{
public ProductRiskMap()
{
Table("AccountManagement.dbo.ProductRisk");

Id(x => x.Id, "ProductRiskID");

References(x => x.AssociatedProduct, "ProductID");
References(x => x.AssociatedClient, "EntityId");

Map(x => x.Reason, "ProductRiskReasonID").CustomType<int>();
Map(x => x.Status, "RiskStatusID").CustomType<int>();
}

Status 是一个具有四个可能值的枚举。它在数据库中表示为对查找表的外键引用。在我的存储库中,我想提取状态为 Medium 的 ProductRisk 对象。或 High . Ling To NHibernate 中的以下查询有效:
    public IList<ProductRisk> GetByClient(int[] clientIds)
{
return NHibernateSession.Current.Query<ProductRisk>()
.Where(x => clientIds.Contains(x.AssociatedClient.Id))
.Where(x => x.Status == RiskStatus.Medium || x.Status == RiskStatus.High)
.ToList();
}

但是,如果我在 Criteria API 中使用(我认为是)等效的查询:
        return NHibernateSession.Current.QueryOver<ProductRisk>()
.WhereRestrictionOn(x => x.AssociatedClient.Id).IsIn(clientIds)
.Where(x => x.Status == RiskStatus.Medium || x.Status == RiskStatus.High)
.List();

我收到以下错误:

Type mismatch in NHibernate.Criterion.SimpleExpression: Status expected type System.Int32, actual type FIS.AccountManagement.Core.Domain.RiskStatus



这是为什么?在此先感谢您的帮助。

最佳答案

当我想在 FluentNH 中将枚举映射到整数时,我将枚举指定为自定义类型,然后应该这样做:

Map(x => x.Status, "RiskStatusID").CustomType<RiskStatus>();

关于nhibernate - Linq to NHibernate 查询比较枚举映射为整数成功,但作为等效条件查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099196/

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