c# - SQL 2000 的 NHibernate 变量限制

标签 c# nhibernate sql-server-2000

我正在尝试在 SQL 2000 的休眠状态下使用 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'.

我能做些什么来解决这个问题吗?为什么这个方言不支持top函数?

最佳答案

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

关于c# - SQL 2000 的 NHibernate 变量限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580011/

相关文章:

带有投影和计数错误的 NHibernate Linq 查询

sql-server - 使用过滤器减少 SQL 跟踪的开销

sql-server - 如何为 T-SQL 选择中的每一行生成随机数?

c# - 已发布的 C# 机器人在一段时间后遇到内部服务器错误

asp.net-mvc - 用于新的 Asp.net CMS 站点的 Oxite 或 S#arp 架构

nhibernate - 即使组件的所有属性都为空,我如何告诉 NHibernate 将组件加载为非空?

sql-server - 作为 CSV 导入操作的一部分,如何一步创建并填充表?

c# - BooleanToVisibilityConverter 的显示/隐藏按钮不起作用

c# - 在 ViewModel 中创建 KeyBinding 时添加参数

c# - 错误 : Index out of range exception unhandled and Operator '*' cannot be applied to operands of type 'object' and 'int'