C# 使用enInclude()方法加载的通用存储库?
以下是我的通用存储库:C# 使用enInclude()方法加载的通用存储库?,c#,asp.net,entity-framework,eager-loading,C#,Asp.net,Entity Framework,Eager Loading,以下是我的通用存储库: 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._db
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();
}
公共类存储库:IRepository其中T:BaseEntity
{
私有数据库上下文_数据库上下文{get;set;}
私有DbSet_DbSet{get;set;}
公共存储库(DbContext上下文)
{
这个._dbContext=context;
这个._dbSet=context.Set();
}
公共IQueryable GetAll(参数表达式[]包括)
{
IQueryable currentSet=此参数;
foreach(包含中的var项目)
{
currentSet=currentSet.Include(项目);
}
返回电流集;
}
public T Get(表达式谓词化,
参数表达式[]包括)
=>this.GetAll(包括).Where(谓词).FirstOrDefault();
}
问题是,当我使用“急切加载”加载一个问题(包括它的答案)时,我无法查询答案投票
我相信我得到了这个错误,因为我加载了一个问题,包括它的答案和包括答案的投票再次。所以我尝试使用thenclude()来解决这个问题,但我不知道如何在通用存储库中应用它
非常感谢您的帮助
谢谢您可以使用嵌套包含来解决您的问题。
参考链接:首先问问自己是否真的需要这个存储库层。通常它只会引起麻烦。当您删除它们并直接使用数据库集时,您真的会损失什么吗?我向项目中添加存储库实现的主要原因是使用依赖项注入,使我的代码更易于测试。但是,它值得强加的限制吗?无论如何,也许会有帮助。@GertArnold我也在使用一个通用存储库,原因与OP相同。你能帮我提供一些链接来理解你在之前的评论中所说的话吗?这是一个只有链接的答案,当链接断开时它就没用了。此外,您提到的EF6解决方案在OP使用的EF核心中绝对不起作用。我想知道为什么它被接受了。