繁体   English   中英

使用实体框架和存储库模式进行多次包含

[英]Multiple includes using Entity Framework and Repository Pattern

我使用实体框架和存储库模式进行所有数据访问,使用表导航时,我注意到当我得到第一个对象并引用导航对象中的字段时,正在运行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);
    }
}

您可以链接包括:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM