NHibernate 3.2 - MsSqlCeDialect:Dialect不支持变量限制

时间:2012-03-30 13:40:52

标签: nhibernate linq-to-nhibernate

我有简单的NHibernate Linq查询(针对MS SQL CE 4):

var productionStarts = (from p in session.Query<Production>()
                                                orderby p.Start descending
                                                select p.Start)
                                                .Distinct()
                                                .Take(maxProductionPlansPerOperation)
                                                .ToArray();

在NH 3.2.0.4000中抛出异常:

System.NotSupportedException occurred
  Message=Dialect does not support variable limits.
  Source=NHibernate
  StackTrace:
       at NHibernate.Dialect.Dialect.GetLimitString(SqlString queryString, Nullable`1 offset, Nullable`1 limit, Parameter offsetParameter, Parameter limitParameter) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Dialect\Dialect.cs:line 1707
  InnerException:

问题导致“.Take(...)”。如果注释掉查询有效。

它适用于NH 3.1,但它不再适用于NH 3.2。

在一些较旧的帖子中,我发现建议使用“MsSqlCe40Dialect”,所以我改变了方言但没有效果。我通过检查ISessionFactory实例的属性验证了NH正在使用正确的方言。

有任何建议如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

方言中有错误,请使用此自定义方言使其正常工作:

public class FixedMsSqlCe40Dialect : MsSqlCe40Dialect
{
  public override bool SupportsVariableLimit
  {
    get
    {
      return true;
    }
  }
}