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函数。我不使用实体框架来解决性能问题。我的问题如下。我目前正在兑现结果集以备将来使用,但我是以硬编码的方式进行的。我将结果集缓存 2 小时。很明显,当 OSADCOL 的表数据发生变化时,正确的实现方式是丢弃我的已兑现数据。看来我必须使用 SQLDependency 或 SQLCacheDependency。问题如下:

  1. 我将如何在此存储库中使用 SQLDependency 或 SQLCacheDependency?
  2. 这两者之间的实际区别是什么?
  3. 有的论坛提到SQLDependency会造成内存泄漏?真的吗?如果是,是否有替代方法?

有任何想法吗?

4

0 回答 0