2017-03-16 75 views
-1

我有調用數據庫表並通過ado.net實體框架獲取數據的基礎控制器。當我打電話給每個控制器時,都會調用控制器當基地控制器被稱爲它的數據從SQL數據庫並拉我的表信息。Asp.Net MVC調用基礎控制器中的數據庫

我讀到實體框架緩存數據。所以在這種情況下,每次控制器調用時它會觸及db還是撞擊一次並緩存數據?

public class BaseController : Controller 
    { 

    MyEntities db= new MyEntities(); 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var details = db.mytables.tolist(); 
     } 
    } 

我所有的控制器繼承控制器基

public class MyController : BaseController 
{ 
    //my code 
} 
+1

你在哪裏讀過EF緩存?它可以以SQL緩存但EF不緩存的方式調用SQL。 –

+0

EF會跟蹤實體,但不會在asp.net中跟蹤實體,因爲您會爲每個請求創建一個新的上下文。此外,您不希望在請求之間重複使用EF上下文,這很危險。 – Igor

+0

您需要實現自己的緩存。 –

回答

1

「我讀了實體框架的緩存數據」

我很懷疑。如果條目被修改,實體框架如何知道而不詢問數據庫?

如果您只有足夠的人退出時進行了多次退出,那麼銀行將會感到非常沮喪,但他們通過緩存表示您已經有足夠的錢了。

這裏是一個簡單的方法來測試它沒有任何第三方工具。

一次運行該應用程序,以便得到通過線

var details = db.mytables.tolist(); 

然後把一個破發點就行了,並關閉數據庫服務

現在讓執行繼續,它應該拋出SQL連接失敗例外,因爲它試圖連接到數據庫

+0

['Find()'uses caching](http://stackoverflow.com/questions/17042697/does-ef-caches-entities-between-different-instances-of-dbcontext)。 – CodeCaster

+0

@CodeCaster如果我正確讀取它,它不緩存數據,只緩存實例。 – Steve

+0

它將緩存實體的表的主鍵,即緩存。如果說EF沒有緩存,因爲這會讓銀行感到不安是過分簡單化。 – CodeCaster

相關問題