NHibernate拦截器内部没有设置参数
Parameters are not set inside NHibernate interceptor
我正在尝试使用拦截器为某些查询添加 WITH (NO LOCK)(并非针对所有查询,因此 ReadUncommitted 不是一个选择)。
代码如下所示:
var rawSql = sql.ToString();
if (!rawSql.Contains(IQueryOverExtensions.QueryHintNoLockString))
return sql;
var noWhere = rawSql.Substring(0, rawSql.IndexOf(WhereKeyword, StringComparison.InvariantCulture));
var from = noWhere.Substring(noWhere.IndexOf(FromKeyword, StringComparison.InvariantCulture));
var fromWithNoLock = from.Replace("_ ", $"_ {WithNoLock} ");
var sqlWithNoLock = rawSql.Replace(from, fromWithNoLock);
return base.OnPrepareStatement(new SqlString(sqlWithNoLock));
在这里,我从 FROM 子句到 WHERE 子句,并为每个别名添加 WITH (NO LOCK)
问题是,最后的SQL的参数都是"?"并抛出 SQL 无效的异常。为什么没有填写参数以及如何解决?
提前致谢
终于明白了。我必须通过调用 sql.GetParameterCount() 来获取参数数量,然后用 @p0、@p1、@p2 等替换所有问号
我正在尝试使用拦截器为某些查询添加 WITH (NO LOCK)(并非针对所有查询,因此 ReadUncommitted 不是一个选择)。 代码如下所示:
var rawSql = sql.ToString();
if (!rawSql.Contains(IQueryOverExtensions.QueryHintNoLockString))
return sql;
var noWhere = rawSql.Substring(0, rawSql.IndexOf(WhereKeyword, StringComparison.InvariantCulture));
var from = noWhere.Substring(noWhere.IndexOf(FromKeyword, StringComparison.InvariantCulture));
var fromWithNoLock = from.Replace("_ ", $"_ {WithNoLock} ");
var sqlWithNoLock = rawSql.Replace(from, fromWithNoLock);
return base.OnPrepareStatement(new SqlString(sqlWithNoLock));
在这里,我从 FROM 子句到 WHERE 子句,并为每个别名添加 WITH (NO LOCK)
问题是,最后的SQL的参数都是"?"并抛出 SQL 无效的异常。为什么没有填写参数以及如何解决? 提前致谢
终于明白了。我必须通过调用 sql.GetParameterCount() 来获取参数数量,然后用 @p0、@p1、@p2 等替换所有问号