2012-12-04 57 views

回答

0
  • 你可以看看延長MsSqlDialect或
  • 實施IConnectionProvider注入自己commandwrapper它增加時ExecuteReader()
2

這個例子提示更是一個有點冗長:

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(); 
    } 
} 

然後在你的SessionFactory /初始化:

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

我相信你也可以簡單地追加'「OPTION(OPTIMIZE未知)」',在這種情況下,所有的參數都被認爲不明(無需指定所有的)。此外,應該不會是'如果(sql.GetParameterCount()== 0)返回SQL;'? – Groo

+0

@Groo是的,是的,並 – mcfea