這個例子提示更是一個有點冗長:
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());
});
我相信你也可以簡單地追加'「OPTION(OPTIMIZE未知)」',在這種情況下,所有的參數都被認爲不明(無需指定所有的)。此外,應該不會是'如果(sql.GetParameterCount()== 0)返回SQL;'? – Groo
@Groo是的,是的,並 – mcfea