Я пытаюсь использовать метод 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'.
Что я могу сделать, чтобы исправить это? Почему этот диалект не поддерживает верхнюю функцию?
Я не думаю, что 'TOP' может обрабатывать параметр. У меня нет ответа о том, как это исправить, поэтому я не отправляю в качестве ответа. –
Я думаю, что @DavidCrowell прав, вы не можете параметризовать значение «TOP», если вы не используете 2005 или новее –
@AndrewWhitaker Это правда правда? Я просто взломал небольшое тестовое приложение, используя команды sql напрямую, и это сработало, как я ожидал. Работает и в SSMS. – Nick