public List<DepartmentsModel> GetDepartmentsByCompanyDB(int companyID){
//How will I pass the companyID value to the function?
return GetObjectFromCache<List<DepartmentsModel>>(string.Format("Departments{0}", "ALL"), 60 * 8,GetDepartmentsByCompanyDB);
}
private List<DepartmentsModel> GetDepartmentsByCompanyDB(int companyID)
{
procurementEntities db = new procurementEntities();
var result = (from a in db.departments
where a.CompanyID == companyID
select new DepartmentsModel
{
CompanyID = a.CompanyID,
DateCreated = a.DateCreated,
DateLastUpdated = a.DateLastUpdated,
ID = a.ID,
IsActive = a.IsActive,
Name = a.Code + " | " +a.Name,
Type = a.Type,
Code=a.Code
}).ToList<DepartmentsModel>();
return result;
}
//http://www.codeshare.co.uk/blog/simple-reusable-net-caching-example-code-in-c/
private static T GetObjectFromCache<T>(string cacheItemName, int cacheTimeInMinutes, Func<T> objectSettingFunction)
{
ObjectCache cache = MemoryCache.Default;
var cachedObject = (T)cache[cacheItemName];
if (cachedObject == null)
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(cacheTimeInMinutes);
cachedObject = objectSettingFunction();
cache.Set(cacheItemName, cachedObject, policy);
}
return cachedObject;
}
-1
A
答えて
0
どのように私はTL任意のパラメータ
を受け付けないFunc
にパラメータを供給することができます。DR
は、その上に閉じることにより、ラムダを使用してスコープの変数をキャプチャします。
説明
代わりにキャッシュミスFunc
でmethod group syntaxを使用して、あなたはゼロのパラメータを持つ関数とそれを交換する必要があります - ここで撮影しcompanyId
使用してラムダとの例です:
return GetObjectFromCache<List<DepartmentsModel>>($"AllDepartmentsForCompany{companyId}",
60 * 8,
() => GetDepartmentsByCompanyDB(companyId));
根拠:
:つのパラメータを取る関数のメソッドグループの構文を使用することと等価です キャッシュミスによって必要なFunc
がパラメータを取らないので、動作しません
x => GetDepartmentsByCompanyDB(x)
からGetObjectFromCache
は、この場合には、パラメータx
を提供していません:
cachedObject = objectSettingFunction(); // No parameter
ますしかし、それでもラムダでそれを閉じてcompanyId
をキャプチャできます。
バート・キャッシュキー私はまた、あなたがキーあなたのキャッシュに論理的なバグを持っていると信じてい
string.Format("Departments{0}", "ALL")
私には意味がありません - あなたは、与えられた会社の全部門をキャッシュしています。キャッシュキーにcompanyId
を使用する必要があります。そうしないと、すべての企業がキャッシュヒット中に同じDepartmentsを返します。なぜあなたは `String.Formatのをやっている
$"AllDepartmentsForCompany{companyId}"
+0
これはすでに動作しています。 – NBT
関連する問題
- 1. iFrameでondblclickイベントを受け入れる方法を教えてください。
- 2. 別のクラスのインスタンス変数でユーザー入力を受け入れる方法を教えてください。
- 3. Scalaはメソッド定義で複数のパラメータを受け取る方法を教えてください。
- 4. xctk:IntegerUpDownは数字だけを受け入れる方法を教えてください。
- 5. Rubyで整数を記入する方法を教えてください。
- 6. @QueryParamは値を持たないパラメータをブール値 "false"に変換する方法を教えてください。
- 7. 数値の精度を調整可能なパラメータにする方法を教えてください。
- 8. PowerBuilder - キーワード検索の方法を教えてください
- 9. AsynchronousServerSocketChannelを使用して接続を受け入れる方法を教えてください。
- 10. TextBoxで数値のみを受け入れる方法を教えてください
- 11. パラメータを@Nullableで注釈した場合のIntelliJ IDEAのパラメータ設定方法を教えてください。
- 12. PHP:exif_imagetype()関数は、JPEGの代わりにJPGファイルを受け入れる方法を教えてください。
- 13. LinuxでPATH検索を中断する方法を教えてください。
- 14. デリゲートをパラメータとして受け入れる方法
- 15. ドライブ(フォルダからフォルダ)で検索する方法を教えてください。
- 16. Spark 2のデータフレームでNone値を受け入れる方法を教えてください。
- 17. http-conduitで自己署名証明書を受け入れる方法を教えてください。
- 18. ジェンキンズがxmppでコマンドを受け入れる方法を教えてください。
- 19. 角度ui-routerテンプレートで2つのビューを受け入れる方法を教えてください。
- 20. websocket onmessageのパラメータの種類を教えてください。
- 21. テキストの整列していない列を整理する方法を教えてください。
- 22. @requestparamの依存パラメータを春のRest APIで検証する方法を教えてください。
- 23. エラーメッセージを修正する方法を教えてください。 "序数パラメータは1ベースであることを忘れないでください!"
- 24. 再生フレームワーク - yamlファイルの "null"値を受け入れる方法を教えてください。
- 25. 一般的なパラメータを特定の静的関数に制限する方法を教えてください。
- 26. オブジェクトをパラメータとして受け入れるPython関数?
- 27. UIAlertControllerとして関数パラメータを受け入れるユーティリティ
- 28. 検索と置換のpythonスクリプトを拡張してコマンドラインから変数を受け入れる方法は?
- 29. 整数をパラメータとして受け取り、配列を返す
- 30. PHP/MySQLで列変数を1回だけ変更する方法を教えてください。
( "部署{0}"、 "ALL")'だけではなく '」:
私はキャッシュキーはの線に沿ってもっと何かする必要があります信じていますDepartmentsALL ""? –
あなたのキャッシュキーは$ "AllDepartmentsForCompany {companyId}"でなければならないと思います.EFは1つの会社のすべての部門を取得します。そのキーをキャッシュキーに含めることができます。 – StuartLC
また、同じクラスに同じシグネチャを持つ2つのメソッドを持つことは合法ではありません( 'private'と' public'キーワードでは区別できません)。 –