我正在尝试按照此处显示的拦截示例使其与 EF 6 一起使用,但遇到了RewriteFullTextQuery
如图 1 所示的函数问题。拦截似乎有效,但实际上并未执行for
循环中的逻辑RewriteFullTextQuery
方法,因为cmd.Parameters.Count
总是为零。此外,该cmd.CommandText
属性似乎正在显示正确的 SQL 查询,我将其作为拦截工作正常的另一证据。
图 1:RewriteFullTextQuery 代码摘录
public static void RewriteFullTextQuery(DbCommand cmd)
{
string text = cmd.CommandText;
for (int i = 0; i < cmd.Parameters.Count; i++)
{
DbParameter parameter = cmd.Parameters[i];
if (parameter.DbType.In(DbType.String, DbType.AnsiString, DbType.StringFixedLength, DbType.AnsiStringFixedLength))
{
RewriteFullTextQuery 函数被ReaderExecuting
图 2 中所示的函数调用,该函数为其提供了导致所有问题的命令参数。
图 2:ReaderExecuting 函数
public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
{
RewriteFullTextQuery(command);
}
尽管我的代码与示例不完全相同,但拦截似乎正在工作,所以这让我想知道是什么条件将填充命令的 aParameters.Count
大于零?