NHibernate 3.2 - MsSqlCeDialect: Диалект не поддерживает переменные ограничения - PullRequest
2 голосов
/ 30 марта 2012

У меня есть простой запрос 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", поэтому я изменилдиалект, но без эффекта.Я проверил, что NH использует правильный диалект, изучив свойства экземпляра ISessionFactory.

Есть предложения, как это исправить?

1 Ответ

3 голосов
/ 04 июня 2012

Это ошибка в диалекте, используйте этот собственный диалект, чтобы он работал:

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