流畅的NHibernate和MySQL强制转换语法?

流畅的NHibernate和MySQL强制转换语法?,mysql,nhibernate,fluent-nhibernate,Mysql,Nhibernate,Fluent Nhibernate,我在MySQL中有一个表,它有一个字符串列“Id”,形式为“Xnnnn”,其中nnnn是一个数字 我想找到定义的最大nnnn。因此,我: var c = s.CreateCriteria(typeof(Item)) .AddOrder(Order.Desc( Projections.Cast( NHibernateUtil.Int32, Projections.SqlFunction("substring", NHibernateUtil.String,

我在MySQL中有一个表,它有一个字符串列“Id”,形式为“Xnnnn”,其中nnnn是一个数字

我想找到定义的最大nnnn。因此,我:

var c = s.CreateCriteria(typeof(Item))
  .AddOrder(Order.Desc(
    Projections.Cast(
       NHibernateUtil.Int32,
       Projections.SqlFunction("substring", NHibernateUtil.String, 
                               Projections.Property("Id"), 
                               Projections.Constant(2), Projections.Constant(10)))
       ))
       .SetProjection(Projections.Property("Id"))
       .SetMaxResults(1)
       .List<string>();
哪个MySQL不喜欢。。。它坚持:

cast(substring(this_.Id, ?p0, ?p1) as SIGNED INTEGER) 
我在演员阵容中尝试了各种类型,但没有一种能产生正确的输出。其他我需要做的映射工作都很好


有什么建议吗?

这是NH的一个漏洞。它在3.0 Alpha2版本中已修复。 请参阅和以供参考

我在这里看到两个选项:

  • 本机SQL查询(session.CreateSQLQuery())
  • 升级到NH3.0(请记住,它仍然是Alpha,但相当稳定)

  • 我没有显式地配置方言,我使用的是流利的NHibernate,我假设它是在那里处理的。当我尝试在配置中设置它时,出现了一个异常,即该属性已设置。3)backport。当我用方言报告一个bug(在3.0中修复)时,fabio建议将3.0提供程序放到定制的2.x版本中。这可能也行。@Gabe Moothart:是的,但在过去使用过这种解决方案后,我尽可能避免使用它。它只是增加了另一件需要记住的事情:“我们正在定制NH构建”。但是,如果您应用的更改与3.0中已经实现的更改完全相同,那么这是一个很好的选择
    cast(substring(this_.Id, ?p0, ?p1) as SIGNED INTEGER)