2

リポジトリ パターンを使用して 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 を使用する必要があるようです。質問は次のとおりです。

  1. このリポジトリで SQLDependency または SQLCacheDependency を使用するにはどうすればよいですか?
  2. これら2つの実際の違いは何ですか?
  3. 一部のフォーラムで、SQLDependency がメモリ リークを引き起こすと言及されていますか? 本当?はいの場合、代替アプローチはありますか?

何か案は?

4

0 に答える 0