Nhibernate 添加查询选项

标签 nhibernate

我最近遇到了 Nhibernate 生成的 SQL 的性能问题,如

中所述

Nhibernate generate plain sql query instead of execution statement

我还发现了一个描述类似经历的链接,来自唯一的杰夫·阿特伍德 (Jeff Atwood),网址为

http://legeronline.blogspot.ca/2009/03/evils-of-slow-paramaterized-query-plans.html

有人知道是否可以向 Nhibernate 添加“优化未知”选项吗?

最佳答案

这个例子有点详细:

public class OptionInterceptor: EmptyInterceptor
{
    public override SqlString OnPrepareStatement(SqlString sql)
    {
        var parameters = sql.GetParameters();
        var paramCount = parameters.Count();

        if (paramCount == 0)
            return sql;

        string optionString = " OPTION (OPTIMIZE FOR (";

        for (var i = 0; i < paramCount; i++)
        {
            var comma = i > 0 ? "," : string.Empty;
            optionString = optionString + comma + "@p" + i + " UNKNOWN";
        }

        optionString = optionString + "))";

        var builder = new SqlStringBuilder(sql);

        builder.Add(optionString);

        return builder.ToSqlString();
    }
}

然后在你的 session 工厂/初始化程序中:

configuration.ExposeConfiguration(x =>
    {
        x.SetInterceptor(new OptionInterceptor());
    });

关于Nhibernate 添加查询选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709340/

相关文章:

NHibernate 处理来自 sp 调用的多个结果集

c# - 有人能更好地解释 nHibernate 中的 'Projections' 是什么吗?

c# - 使用 Linq 和 lambda 来展平列表

.net - Azure SQL V12 的最佳流畅 NHibernate 配置?

NHibernate - 联合三个 QueryOver

c# - NHibernate.LazyInitializationException 异常

c# - 关联引用未映射类 : System. Guid

wcf - 具有 NHibernate 和企业业务逻辑的 OData WCF 数据服务

c# - NHibernate - 通过内部集合中的两个项目的标准获取类

c# - Fluent NH 和接口(interface)映射