1

我正在使用实体框架和存储库模式进行所有数据访问,当使用表导航时,我注意到当我获得第一个对象并引用导航对象中的字段时正在运行 2 个查询。由于我在数据库中有很多关系,将这种技术用于我的导航属性可能会导致性能开销。

我研究了这个Include(string tableName)方法,这会很好用(如果我没有使用通用 RP),但这只需要一个表名。我已经设法通过更改我的 where fromclasss来在我的存储库模式中为一个包含复制此内容,EntityObject但是如何使用存储库模式在一个查询中包含多个包含?

这是我的代码:

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);
    }
}
4

1 回答 1

9

您可以链接您的包含:

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);
}
于 2012-09-27T16:36:11.683 回答