刷新存储库导致在更新缓存时选择全部

时间:2013-01-22 16:51:45

标签: c# entity-framework unity-container repository-pattern unity-application-block

我使用Microsoft Practices和Patterns Unity Application Block来解析存储库,有时我需要在从数据库获取数据时刷新/清除缓存(选择最近更新的数据时)

执行select all语句的行是Context.Refresh(RefreshMode.StoreWins, this.ObjectSet);

当我在幕后刷新实体时,实体对象在执行刷新时在表上执行SELECT *。这导致我的应用程序中断,并且表可能包含1000000+行,因此它们都被加载到内存中。

我使用Unity来解析存储库接口(如果这有什么不同)

这是我的代码:

public class GenericRepository<T> : IRepository<T> where T : EntityObject, new()
{
    private MIS3Entities _Context;
    private MIS3Entities Context
    {
        get
        {
            if (_Context == null)
                _Context = new MIS3Entities();

            return _Context;
        }
    }

    private ObjectSet<T> _ObjectSet;
    private ObjectSet<T> ObjectSet
    {
        get
        {
            if (_ObjectSet == null)
                _ObjectSet = Context.CreateObjectSet<T>();

                return _ObjectSet;
        }
    }

    public virtual IQueryable<T> GetAll(bool refreshDataStore = false)
    {
        if (refreshDataStore)
            Context.Refresh(RefreshMode.StoreWins, this.ObjectSet);

        return this.ObjectSet.AsQueryable();
    }

    public IQueryable<T> FindBy(Expression<Func<T, bool>> predicate, bool refreshDataStore = false)
    {
        if (refreshDataStore)
            Context.Refresh(RefreshMode.StoreWins, this.ObjectSet);

        return this.ObjectSet.Where(predicate);
    }      
}

我一直在网上找不到解决方案来清除实体框架缓存而不执行select all语句。

以前有人有这个问题吗?

如果是的话,解决方案是什么?

0 个答案:

没有答案