Я запрашиваю 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>();
}
Статус — это перечисление с четырьмя возможными значениями. Он представлен в базе данных как ссылка внешнего ключа на таблицу поиска. В моем репозитории я хочу получить объекты ProductRisk со статусом Medium
или 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();
Я получаю следующую ошибку:
Несоответствие типов в NHibernate.Criterion.SimpleExpression: ожидаемый тип состояния System.Int32, фактический тип FIS.AccountManagement.Core.Domain.RiskStatus
Это почему? Заранее благодарю за любую помощь.
CustomType<int>
? Я не думаю, что это необходимо. - person Diego Mijelshon   schedule 12.11.2011