2017-10-09 86 views
1

使用實體框架我已經使用IDbCommandTreeInterceptor實施了軟刪除&數據級別限制。對於使用上下文的第一個查詢,攔截器會被擊中。但再次嘗試(刷新瀏覽器),攔截器會被跳過。我已通過使用SQL Server Management Studio更改某些數據來檢查數據是否正在緩存。反映的變化,但攔截器仍然跳過。可能導致這種情況發生的原因是什麼?爲什麼在第二次查詢時跳過了IDbCommandTreeInterceptor?

+0

那麼通過攔截器跳過你的意思是目標實體是否真的被刪除而不是「軟」被刪除? – Evk

+0

軟刪除後返回軟刪除對象 –

+0

調試時也會跳過攔截器。 –

回答

1

according to the sources comments這是預期的行爲

命令樹兩種數據庫查詢,插入/更新/刪除 命令。然而,查詢 命令樹被模型緩存,這意味着該命令樹創建只發生在執行查詢 第一時間和該通知僅會在那個時候

發生,因爲你的攔截結果不能依賴的結果關於數據。

+0

可以理解,但仍有一點令人困惑的是,如果我運行新的查詢,攔截器會被擊中(對於舊查詢),然後通過EF重新運行舊查詢。但是,如果兩個查詢都已經執行過一次,那麼攔截器會被交替地跳過,直到執行新的查詢。然後Interceptor被新命令和兩個舊查詢命中。 –

+0

@JohnStaurt確實出乎意料。您是否修改了配置的queryCache部分(請參閱https://blogs.msdn.microsoft.com/premier_developer/2017/03/23/entity-framework-query-caching/)? – jbl

相關問題