C#-倉儲模式-關於上下文的釋放

首先,在起初沒有使用倉儲模式時,本人在使用EF上下文基本都用了using標記,隨時使用隨時釋放,如下所示:

using(dbcontext con = new dbcontext()){
	con.xxx......;
}

我們大家哦度知道,EF查詢跟蹤是存在數據緩存的,如果隨時釋放將無法利用緩存帶來的查詢速度提升。

同樣,EF緩存也面臨查詢出現髒數據的問題,各有利弊。

EF是默認開啓數據查詢緩存的,如果你需要開啓緩存後保證查詢數據的實時性,可用**AsNoTracking()**方法查詢最新數據,如下所示:

using(dbcontext con = new dbcontext()){
	con.xxx.AsNoTracking().Tolist();
}

微軟文檔原文:https://docs.microsoft.com/en-us/ef/ef6/querying/no-tracking

在項目當中,倉儲模式大多數設計都是依賴DI注入來獲取上下文對象,那麼上下文的生命週期也就是由DI來控制,具體需要根據項目需求來設計。

個人而言,喜歡針對同一模型採用獨立的上下文實例對象來保證數據有效性,無論是EF緩存,還是惰性加載等機制,感覺都是爲MVC設計,且產生的髒數據問題並沒有一套完整的機制來處理,只能用某種方法來規避,而在前後端分離項目當中,往往緩存都是由Redis,Mongodb來負責DB和View之間的數據緩存來保證查詢效率,SQLServer2017之後也設計了DB緩存庫,貌似用的人並不是很多,具體性能不好評判。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章