我使用实体框架和存储库模式进行所有数据访问,使用表格导航时我注意到当我获得第一个对象并引用导航对象中的字段时,正在运行2个查询。由于我在导航属性中使用此技术在数据库中有很多关系,因此可能会导致性能开销。
我已经查看了Include(string tableName)
方法,这将非常有效(如果我没有使用通用RP),但这只需要一个表名。我已经设法在我的存储库模式中通过将classs
更改为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);
}
}
答案 0 :(得分: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);
}