Запрос Linq to NHibernate, сравнивающий перечисление, отображаемое как целое число, завершается успешно, но не выполняется как эквивалентный запрос критериев

Я запрашиваю 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

Это почему? Заранее благодарю за любую помощь.


person Vish    schedule 11.11.2011    source источник
comment
Вы пытались удалить CustomType<int>? Я не думаю, что это необходимо.   -  person Diego Mijelshon    schedule 12.11.2011


Ответы (1)


когда я хочу сопоставить перечисления с целыми числами в FluentNH, я указываю перечисление как пользовательский тип, тогда это должно делать:

Map(x => x.Status, "RiskStatusID").CustomType<RiskStatus>();
person Firo    schedule 14.11.2011