NHibernate 3.2 - MsSqlCeDialect : Dialect does not support variable limits

标签 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 使用的是正确的方言。

有什么建议可以解决这个问题吗?

最佳答案

这是方言中的错误,请使用此自定义方言使其工作:

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

关于NHibernate 3.2 - MsSqlCeDialect : Dialect does not support variable limits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944136/

相关文章:

c#-4.0 - 如何为 NHibernate LINQ 语句设置超时

c# - 我如何模拟或类似地注入(inject)对应用于 NHibernate session 的查询扩展方法的替换

c# - 如何将 Nullable<T> 参数与 nHibernate Linq 表达式一起使用?

NHibernate.QueryException : could not resolve property

nhibernate - Fluent Nhibernate - 在 SQL CE 4 中自动生成表时如何指定表模式

c# - 休眠 : saving and retrieving a file to/from database

NHibernate 提交数据库更改而无需显式调用保存或更新

c# - MVC 3,在哪里提交工作单元?

c# - 如何使用 Session.Delete(query) 知道删除了多少持久对象

c# - 如何使用 Orchard CMS ContentManager 运行 LINQ 子查询?休眠问题?