fluent nhibernate问题映射字符(1)类型

fluent nhibernate问题映射字符(1)类型,nhibernate,fluent-nhibernate,nhibernate-mapping,nhlambdaextensions,sql-types,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Nhlambdaextensions,Sql Types,地图 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;

地图

    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>();
    }
public SocialCode FetchByCode(字符码)
{
返回Session.CreateCriteria();
}
我在运行FetchByCode()时收到此错误

System.Exception:无法将'65'转换为System.Char
位于NHibernate.LambdaExtensions.ExpressionProcessor.ConvertType(对象值,类型)
位于NHibernate.LambdaExtensions.ExpressionProcessor.ProcessSimpleExpression(二进制表达式be)
位于NHibernate.LambdaExtensions.ExpressionProcessor.ProcessBinaryExpression(二进制表达式)
位于NHibernate.LambdaExtensions.ExpressionProcessor.ProcessLambdaExpression(LambdaExpression表达式)
位于NHibernate.LambdaExtensions.ExpressionProcessor.ProcessExpression(表达式`1表达式)
位于NHibernate.LambdaExtensions.ICriteriaExtensions.Add(ICriteria标准,表达式`1 Expression)
位于socialcodepository.cs中的DAL.NHibernate.xxx.socialcodepository.FetchByCode(字符代码):第18行
在SocialDepositoryFixture.cs中的UnitTests.DAL.xxx.yyy.SocialDepositoryFixture.FetchByCode_ReturnsAllCodeDNE()处:第38行

看来NHibernate正在把我的字符转换成整数。如何强制它使用列上的char(1)类型?

我假设Fluent NH可以自动正确检测char类型。但如果不能,你可以随时给它一个提示。试试这个

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

我已经测试过了。谢谢你的建议。当我尝试以下操作时,我得到了一个新的异常:NHibernate.MappingException:无法实例化IType CharType:System.MissingMethodException:没有为此对象定义无参数构造函数。这发生在我构建SessionFactory的那一行。SessionFactory=configuration.BuildSessionFactory();想法?@ddc0660-Map(x=>x.Code)。CustomSqlType(“char(1)”)适合我。由于使用了字符串,这不是一个好的解决方案,但它可以工作。
Map(x => x.Code).CustomType<NHibernate.Type.CharType>();
// mapping
Map(x => x.Code);

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