我試圖按照示例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
大於零?
我昨天在答案中發現了這個博客,並在我注意到你改變了你的答案之前發佈了我的答案,正是我發現的。我想接受我的回答,因爲博客中有一個解決方案幫助我解決問題,但是會提高您的答案以表示對您的幫助表示讚賞。 –