簡體   English   中英

Entity Framework Plus - 是否可以在不同查詢之間共享實體?

[英]Entity Framework Plus - is it possible to share entities between different queries?

我正在評估 EF6 .NET 框架 4.7.2(非核心)的 EntityFramework Plus。

在初步調查期間,我發現默認情況下緩存鍵基於 SQL 查詢,而不是結果集中的實體類型。

我的問題是,緩存中的實體是否以某種方式共享?

例如,如果我的第一個 EF 查詢是:

var employees = myContext.LookupData.Where(x=>x.Id < 100).FromCache()

我的第二個 EF 查詢,在第一個 myContext 是 Dispose()d 后10 分鍾執行,是:

var employees = myContext.LookupData.Where(x=>x.Id < 50).FromCache()

我們可以看到第二個查詢的結果集將包含第一個查詢的記錄。

Entity Framework Plus 是否會檢查實體 EF 是否即將在內存中具體化,是否已經存在於第一次查詢的緩存中,或某些共享實體緩存中?

如果沒有,使用 EF Plus 緩存永不更改或不經常更改的實體以在查詢之間共享的最佳實踐是什么?

我目前有一個使用標簽為用作查找數據的每種類型的實體創建從 Type.FullName 派生的命名緩存的解決方案,但有什么更好的方法嗎?

提前致謝。

使用的緩存是MemoryCachehttps : //github.com/zzzprojects/EntityFramework-Plus/blob/master/src/shared/Z.EF.Plus.QueryCache.Shared/QueryCacheManager.cs#L41

Entity Framework Plus 是否會檢查實體 EF 是否即將在內存中具體化已存在於緩存中

來自兩個查詢的實體將不同。 即使它們具有相同的 id,引用也不會相同。 其背后的原因是,在第一個查詢中,您可能包含了相關部門,但沒有包含在第二個查詢中。 所以我們根本不檢查實體是否已經在緩存中。

緩存永不更改或不經常更改的最佳做法是什么

這取決於,如果您只有 2000 名員工,可能一次加載所有內容並重新使用緩存將是一個非常好的解決方案。 在應用程序端過濾一個小列表不會影響性能:

var employees = myContext.LookupData.FromCache().Where(x=>x.Id < 100);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM