代码之家  ›  专栏  ›  技术社区  ›  Tan Sang

是否使用ThenInclude()方法对通用存储库进行即时加载?

  •  4
  • Tan Sang  · 技术社区  · 8 年前

    以下是我的通用存储库:

    public class Repository<T> : IRepository<T> where T : BaseEntity
    {
        private DbContext _dbContext { get; set; }
        private DbSet<T> _dbSet { get; set; }
    
        public Repository(DbContext context)
        {
            this._dbContext = context;
            this._dbSet = context.Set<T>();
        }
    
        public IQueryable<T> GetAll(params Expression<Func<T, object>>[] includes)
        {
            IQueryable<T> currentSet = this._dbSet;
            foreach (var item in includes)
            {
                currentSet = currentSet.Include(item);
            }
            return currentSet;
        }
    
        public T Get(Expression<Func<T, bool>> predicated, 
            params Expression<Func<T, object>>[] includes) 
            => this.GetAll(includes).Where(predicated).FirstOrDefault();
    }
    

    问题是,当我使用即时加载加载问题(包括其答案)时,我无法查询答案投票。

    我相信我得到了这个错误,因为我正在加载一个问题,包括它的答案,并再次包括答案的投票。所以我尝试使用thenClude()来解决这个问题,但我不知道如何在通用存储库中应用它。

    非常感谢您的帮助。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   Phú Dnp    8 年前

    可以使用嵌套包含来解决问题。 参考链接: EF LINQ include multiple and nested entities