我正在查询包含Status属性的ProductRisk,其中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>();
}
状态是包含四个可能值的枚举。它在数据库中表示为查找表的外键引用。在我的存储库中,我想要提取状态为Medium
或High
的ProductRisk对象。 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();
我收到以下错误:
NHibernate.Criterion.SimpleExpression中的类型不匹配:状态 期望的类型System.Int32,实际类型 FIS.AccountManagement.Core.Domain.RiskStatus
为什么?在此先感谢您的帮助。
答案 0 :(得分:4)
当我想将枚举映射到FluentNH中的int时,我将枚举指定为自定义类型,那么这应该是:
Map(x => x.Status, "RiskStatusID").CustomType<RiskStatus>();