2015-06-01 4 views
2

Я пытаюсь использовать метод Take в спящем режиме с SQL 2000. При этом, он дает мне ошибку: Dialect does not support variable limits.NHibernate переменных пределы с SQL 2000

В поисках вокруг я нашел способ, чтобы переопределить проверки для и установите мой код следующим образом:

 return Fluently.Configure() 
         .Database(PersistenceConfigurer("####")) 
         .Mappings(m => m.HbmMappings.AddFromAssembly(Assembly.Load("####"))) 
         .Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.Load("####"))) 
         .CurrentSessionContext<WebSessionContext>() 
         .BuildSessionFactory(); 
    } 

    private static IPersistenceConfigurer PersistenceConfigurer(string connection) 
    { 
     var provider = MsSqlConfiguration.MsSql2000.ConnectionString(connection); 
     provider.Dialect<FixedDialect>(); 
     return provider; 
    } 
} 
public class FixedDialect : NHibernate.Dialect.MsSql2000Dialect 
{ 
    public override bool SupportsVariableLimit 
    { 
     get 
     { 
      return true; 
     } 
    } 
} 

Это, похоже, создает правильный синтаксис. Это создает заявление

[ select top @p0 order0_.field1 as field1_, order0_.field2 as field2_ from db.table order0_ where [email protected] ] 
    Name:p1 - Value:LY02 Name:p2 - Value:10 

Но это не устанавливая значение @ p0, так что ногами назад Line 1: Incorrect syntax near '@p0'.

Что я могу сделать, чтобы исправить это? Почему этот диалект не поддерживает верхнюю функцию?

+1

Я не думаю, что 'TOP' может обрабатывать параметр. У меня нет ответа о том, как это исправить, поэтому я не отправляю в качестве ответа. –

+0

Я думаю, что @DavidCrowell прав, вы не можете параметризовать значение «TOP», если вы не используете 2005 или новее –

+0

@AndrewWhitaker Это правда правда? Я просто взломал небольшое тестовое приложение, используя команды sql напрямую, и это сработало, как я ожидал. Работает и в SSMS. – Nick

ответ

1

Мне просто нужно было обновить NHibernate до последней версии. Эта проблема не существует в версии 4.0.3.