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'));