我使用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语句。
以前有人有这个问题吗?
如果是的话,解决方案是什么?