我试图按照示例here所示的拦截示例使其与EF 6一起工作,但遇到如图1所示的函数RewriteFullTextQuery
的问题。拦截似乎正常但它并不实际执行RewriteFullTextQuery
方法的for
循环中的逻辑,因为cmd.Parameters.Count
始终为零。此外,cmd.CommandText
属性似乎正在显示正确的SQL查询,我将其作为拦截工作正常的另一项证据。拦截不按预期与实体框架一起工作6
图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功能正在由图2中所示的功能ReaderExecuting
这使得它是导致所有的麻烦的命令参数调用。
图2:ReaderExecuting功能
public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
{
RewriteFullTextQuery(command);
}
即使我的代码是不完全一样的例子中,拦截似乎是工作,所以它是让我知道什么样的条件是将填充命令有一个Parameters.Count
大于零?
我昨天在答案中发现了这个博客,并在我注意到你改变了你的答案之前发布了我的答案,正是我发现的。我想接受我的回答,因为博客中有一个解决方案帮助我解决问题,但是会提高您的答案以表示对您的帮助表示赞赏。 –