C# 如何编写包含所有导航属性的通用实体getter方法?
我编写了一个通用的repo方法,包括以下所有导航属性:C# 如何编写包含所有导航属性的通用实体getter方法?,c#,entity-framework-core,C#,Entity Framework Core,我编写了一个通用的repo方法,包括以下所有导航属性: public async Task<IEnumerable<T>> GetAllWhereAsync(Expression<Func<T, bool>> expression, bool include = false) { if (include) foreach (var name in _db.Model.FindEntityTyp
public async Task<IEnumerable<T>> GetAllWhereAsync(Expression<Func<T, bool>> expression, bool include = false)
{
if (include)
foreach (var name in _db.Model.FindEntityType(typeof(T)).GetNavigations().Select(e => e.Name))
_db.Set<T>().Include(name).Load();
return await _db.Set<T>().AsNoTracking().Where(expression).ToListAsync();
}
public异步任务getAllwheresync(表达式,bool include=false)
{
如果(包括)
foreach(在_db.Model.FindEntityType(typeof(T)).GetNavigations()中的变量名。选择(e=>e.name))
_db.Set().Include(name.Load();
return await_db.Set().AsNoTracking().Where(expression.toListSync();
}
但是,当我调用此方法时,生成的实体没有包含其导航属性。我该怎么办?看看这个修改是否可以编译,我现在不在编译器附近,所以不能确定
public async Task<IEnumerable<T>> GetAllWhereAsync(Expression<Func<T, bool>> expression, bool include = false)
{
var query = _db.Set<T>();
if (include)
foreach (var name in _db.Model.FindEntityType(typeof(T)).GetNavigations().Select(e => e.Name))
query = query.Include(name);
return await query.AsNoTracking().Where(expression).ToListAsync();
}
public异步任务getAllwheresync(表达式,bool include=false)
{
var query=_db.Set();
如果(包括)
foreach(在_db.Model.FindEntityType(typeof(T)).GetNavigations()中的变量名。选择(e=>e.name))
query=query.Include(名称);
return wait query.AsNoTracking().Where(expression.toListSync();
}
Include()
调用需要链接在一起,并且在返回中使用相同的IQueryable
。LINQ通常是不可变的,甚至从似乎修改查询的内容返回新的查询对象。这里的查询实际上是一个数据库集,因此我无法将类型“System.LINQ.IQueryable”隐式转换为“Microsoft.EntityFrameworkCore.DbSet”Edit:var query=\u db.Set().AsQueryable();作品谢谢