беглое отображение проблемных типов - PullRequest
1 голос
/ 22 сентября 2009

Карта.

    public SocialCodeMap()
    {
        Id(x => x.SocialCodeId);
        Map(x => x.Name);
        Map(x => x.Code);
        Map(x => x.DisplayOrder);
    }

И Класс.

public class SocialCode
{
    public virtual Guid SocialCodeId { get; set; }
    public virtual string Name { get; set; }
    public virtual char Code { get; set; }
    public virtual int DisplayOrder { get; set; }
}

И звонок.

    public SocialCode FetchByCode(char code)
    {
        return Session.CreateCriteria<SocialCode>().Add<SocialCode>(x => x.Code == code).UniqueResult<SocialCode>();
    }

Я получаю эту ошибку при запуске FetchByCode ().

System.Exception: Cannot convert '65' to System.Char
at NHibernate.LambdaExtensions.ExpressionProcessor.ConvertType(Object value, Type type)
at NHibernate.LambdaExtensions.ExpressionProcessor.ProcessSimpleExpression(BinaryExpression be)
at NHibernate.LambdaExtensions.ExpressionProcessor.ProcessBinaryExpression(BinaryExpression expression)
at NHibernate.LambdaExtensions.ExpressionProcessor.ProcessLambdaExpression(LambdaExpression expression)
at NHibernate.LambdaExtensions.ExpressionProcessor.ProcessExpression<T>(Expression`1 expression)
at NHibernate.LambdaExtensions.ICriteriaExtensions.Add<T>(ICriteria criteria, Expression`1 expression)
at DAL.NHibernate.xxx.SocialCodeRepository.FetchByCode(Char code) in SocialCodeRepository.cs: line 18
at UnitTests.DAL.xxx.yyy.SocialCodeRepositoryFixture.FetchByCode_ReturnsNullCodeDNE() in SocialCodeRepositoryFixture.cs: line 38 

Кажется, NHibernate конвертирует мой char в int где-то по пути. Как заставить его использовать тип char (1), указанный в столбце?

1 Ответ

2 голосов
/ 23 сентября 2009

Я предполагаю, что Fluent-NH может автоматически определять тип символа. Но если это невозможно, вы всегда можете показать намек на это. Попробуйте это

Map(x => x.Code).CustomType<NHibernate.Type.CharType>();

Обновление:

Извините, что я не проверял код. Ну, я попытался и обнаружил, что ошибка в NH Lambda Extensions. Короче,

// mapping
Map(x => x.Code);

// querying
criteria.Add(Restrictions.Eq("Code", 'A'));

Я проверял, это должно работать.

...