2012-09-27 172 views
0

我使用實體框架和我所有的數據訪問一個存儲庫模式,使用表導航時,我注意到,2個查詢正在運行時,我得到的第一個對象,並引用一個字段一個導航對象。由於我在導航屬性中使用這種技術在數據庫中有很多關係,可能會導致性能開銷。多個包括使用實體框架和存儲庫模式

我特地到Include(string tableName)方法,這將工作非常好(如果我沒有使用一個通用的RP),但這個只需要一個表名。我已成功地複製這個在我的倉庫模式的一個包括通過改變我從何處來classsEntityObject我怎麼可以有多個包含在一個查詢中使用一個倉庫模式?

這裏是我的代碼:

public class GenericRepository<T> : IRepository<T> where T : EntityObject, new() 
{ 
    private Entities _Context; 
    private ObjectSet<T> _ObjectSet; 

    public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate, string include) 
    { 
     // This works OK 
     return this._ObjectSet.Include(include).Where(predicate); 
    } 

    public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate, param string[] include) 
    { 
     // This will not work but is what I am trying to do 
     return this._ObjectSet.Include(include).Where(predicate); 
    } 
} 

回答

8

您可以鏈的包括:

public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate, param string[] include) 
{ 
    IQueryable<T> query = this._ObjectSet; 
    foreach(string inc in include) 
    { 
     query = query.Include(inc); 
    } 

    return query.Where(predicate); 
} 
+0

這不是編譯,'查詢= query.Include(INC)'的IQueryable 不包含的方法稱爲「包含」。 –

+0

您可能需要添加一個'使用System.Data.Entity' – heavyd

+0

這已經被添加。 –