2012-08-10 63 views
0

我已經開始思考通用EF做法,我發現後http://blog.damianbrady.com.au/2012/03/07/a-generic-crud-repository-for-entity-framework/通用實體框架和IQueryable的<T>

的代碼片段:

protected Dictionary<string, object> CachedObjects = new Dictionary<string, object>(); 

protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : EntityObject 
{ 
    var fulltypename = typeof(TEntity).AssemblyQualifiedName; 
    if (fulltypename == null) 
     throw new ArgumentException("Invalid Type passed to GetObjectSet!"); 
    if (!CachedObjects.ContainsKey(fulltypename)) 
    { 
     var objectset = base.CreateObjectSet<TEntity>(); 
     CachedObjects.Add(fulltypename, objectset); 
    } 
      return CachedObjects[fulltypename] as ObjectSet<TEntity>; 
} 

... 

public TEntity GetFirstOrDefault<TEntity>(Func<TEntity, bool> predicate) where TEntity : EntityObject 
{ 
    return GetObjectSet<TEntity>().FirstOrDefault(predicate); 
} 

現在,如果這兩條線的代碼是平等的?

adapter.db.GetFirstOrDefault<MyTable>(x => x.ID == 1); 
adapter.db.MyTable.FirstOrDefault(x => x.ID == 1); 

我在問,因爲我不想將所有項目加載到內存中,然後對它們進行一些過濾。有沒有辦法像IQueryable<T>那樣進行這種通用操作?

+0

什麼是'adapter.db'?什麼是'adapter.db.MyTable'? – 2012-08-10 13:12:57

回答

1

我在問,因爲我不想加載所有的項目到內存 ,然後對它們做一些過濾。有沒有什麼辦法可以將這種類似於IQueryable的泛型操作?

它加載所有項目並在內存中進行過濾,因爲它使用Func<TEntity, bool>而不是Expression<Func<TEntity, bool>>。此外,它使用一些無用的基礎設施來進行分組。您只需使用objectContext.CreateObjectSet<TEntity>即可獲取對象集。