リポジトリ パターンを使用して ASP.NET MVC アプリケーションを構築しています。私のリポジトリでの典型的な方法は次のとおりです
public IList<T> Select<T>(string cacheKey, string Sql, object filter) where T: new()
{
IList<T> items = MemoryCache.Default.Get(cacheKey) as IList<T>;
if (items == null || !items.Any())
{
items = Connection.Select<T>(Sql, filter);
MemoryCache.Default.Add(cacheKey, items, DateTime.Now.AddMinutes(120));
}
return items;
}
そして、それは次のように使用されています
IEnumerable<OSADCOL> osadcols = Repository.Select<OSADCOL>("OSADCOLS__TblId=" + Id, "TBLid = @id", new { id = Id });
上記の例では、OSADCOL はアプリ内のモデルであり、データベース内の同じ名前のテーブルを表しています。Connection.Select
機能はORMlite機能です。パフォーマンスの問題で Entity Framework を使用していません。私の問題は次のとおりです。現在、将来の関連性のために結果セットをキャッシュしていますが、ハードコードされた方法で行っています。結果セットを 2 時間キャッシュしています。OSADCOL のテーブル データが変更されたときに、キャッシュされたデータを破棄することが適切な実装であることは明らかです。SQLDependency または SQLCacheDependency を使用する必要があるようです。質問は次のとおりです。
- このリポジトリで SQLDependency または SQLCacheDependency を使用するにはどうすればよいですか?
- これら2つの実際の違いは何ですか?
- 一部のフォーラムで、SQLDependency がメモリ リークを引き起こすと言及されていますか? 本当?はいの場合、代替アプローチはありますか?
何か案は?