庫模式我有如下一個倉庫接口:與緩存和SqlMethods
public interface IDataContext<TId> : IDisposable
{
IQueryable<T> Repository<T>() where T : class, IEntity<TId>;
T FindById<T>(TId id) where T : class, IEntity<TId>;
void Insert<T>(T item) where T : class, IEntity<TId>;
void Delete<T>(T item) where T : class, IEntity<TId>;
void Commit();
}
注意Repository<T>
返回IQueryable<T>
。
我有一個類,可以換一個LinqToSQL數據上下文,與Repository<T>
方法如下:
public IQueryable<T> Repository<T>() where T : class, IEntity<int>
{
ITable table = _context.GetTable(GetEntityType<T>());
return table.Cast<T>();
}
這工作得很好,我可以這樣做
new Repository(new SQLDataContext())
.Repository<MyEntity>().Where(e => SqlMethods.Like(e.Id, "123%");
現在我已經開始考慮緩存但我有一個問題。
我創建了一個包裝和實現IDataContext<TId>
的類,它將緩存來自內存中調用Repository<T>
的結果。喜歡的東西下面:
public IQueryable<T> Repository<T>() where T : class, IEntity<TId>
{
// Actual caching logic here.....
return _CachedEntities[typeof(T)].OfType<T>().AsQueryable<T>();
}
我的問題是,現在的IQueryable<T>
我回是在內存中,未轉換爲SQL,所以我得到關於使用SqlMethods.Like
異常。
TL; DR:所以,我怎麼能以這樣的方式創建我的緩存庫包裝,調用類不需要擔心是否IDataContext<T>
它處理的是內存中的存儲庫(即緩存一個)還是正常的LinqToSQL存儲庫?
你最有可能調用'AsQueryable'上緩存的IEnumerable'返回時? –
2013-05-01 08:06:50
@ErenErsönmez:對。 – 2013-05-01 08:14:42