2011-09-05 80 views
6

我想實現一個可能需要使用Redis的緩存模式。這種模式的問題是我需要禁用Configuration.ProxyCreationEnabled,然後重新啓用它,以避免Web場中的任何問題。從IQueryable訪問DbContext

我想要做的就是從IQueryable訪問DbContext,這樣我就可以做到這一次,而不是到處都是。要做到這一點,最簡單的方法是通過的DbContext使用到我的緩存擴展,但是我碰到此帖一:

Access DataContext behind IQueryable

是否有訪問的DbContext以類似的方式,以上面的鏈接的方式使用EF 4.1 Code Fist(DbSet's等)?

我試圖自己找到這個,但一直在努力從使用反射的IQueryable中引用的DbSet中找到基類。

回答

5

Access DataContext behind IQueryable中提到的解決方案是黑客攻擊,不應使用。它依賴於實現IQueryable的類中的私有成員變量的名稱。這意味着實現類可能會在未來的EF/.NET Framework版本中發生變化並破壞您的代碼。由於DbContext無法通過IQueryable接口訪問,因此應將其傳遞到緩存擴展中,以避免對IQueryable實現進行假設。這樣做也將更清楚地在緩存界面中建立對DbContext的依賴關係,而不是將其隱藏在實現中。

+0

謝謝。得出了類似的結論,但認爲抽象實現會很好。 – didiHamman