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

Vis*_*ish 5 nhibernate linq-to-nhibernate nhibernate-criteria

我正在查询 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>();
    }
Run Code Online (Sandbox Code Playgroud)

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();
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我在 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();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

NHibernate.Criterion.SimpleExpression 中的类型不匹配:状态预期类型 System.Int32,实际类型 FIS.AccountManagement.Core.Domain.RiskStatus

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

Fir*_*iro 4

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

Map(x => x.Status, "RiskStatusID").CustomType<RiskStatus>();
Run Code Online (Sandbox Code Playgroud)