NHibernate变量限制SQL 2000

时间:2015-06-01 17:53:05

标签: c# nhibernate sql-server-2000

我正在尝试在SQL 2000中使用hibernate中的Take方法。这样做时,它会给我错误:Dialect does not support variable limits.

在搜索时我发现了一种覆盖变量限制支持检查的方法,并按如下方式设置我的代码:

        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 order0_.field3=@p1 ]
  Name:p1 - Value:LY02  Name:p2 - Value:10

但是它没有为@ p0设置值,所以它会回来Line 1: Incorrect syntax near '@p0'.

我能做些什么来解决这个问题吗?为什么这个方言不支持顶级功能?

1 个答案:

答案 0 :(得分:1)

我只需要将NHibernate更新到最新版本。版本4.0.3中不存在此问题。