図1に示すように、hereという傍受例に従うと、EF 6で動作するようになりましたが、RewriteFullTextQuery
の問題が発生しています。 cmd.Parameters.Count
は常にゼロであるため、RewriteFullTextQuery
メソッドのfor
ループ内のロジックは実際には実行されません。さらに、cmd.CommandText
プロパティは、傍受が正しく機能しているという別の証拠として、正しいSQLクエリを表示しているようです。インターセプトがEntity Framework 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
が0より大きい場合
私は昨日の答えでブログを見つけ、私があなたが答えを見つけた直前に私の答えを投稿しました。ブログには私を助けてくれた解決策があったので、あなたの助けに感謝の気持ちを示すために答えをアップアップするので、私は私の答えを受け入れたいと思います。 –