我想通过业务逻辑项目创建通用数据访问层,业务逻辑层必须与我有一个存储库的DAL层交互。 我希望有一个短期数据上下文和所有存储库方法返回IEnumerable而不是IQueryable。 提示方法GetAll的示例如何通过ThenInclude或Select to dependent tables提取连接的数据。
public class GenericDataRepository<T> : IGenericDataRepository<T> where T : class
{
public virtual IList<T> GetAll(params Expression<Func<T, object>>[] navigationProperties)
{
List<T> list;
using (var context = new Context())
{
IQueryable<T> dbQuery = context.Set<T>();
//Apply eager loading
foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<T, object>(navigationProperty);
list = dbQuery
.AsNoTracking()
.ToList<T>();
}
return list;
}
}
ThenInclude(PROP2 =&GT; prop2.i)?
dbQuery.Include(navigationProperty).ThenInclude(PROP2 =&GT; prop2.i)
答案 0 :(得分:0)
这实际上是糟糕的设计。你不想这样做。如果要抽象数据访问层,请完全执行此操作。创建一个为您的应用程序提供API的库,它可以准确地返回您所需的API,不多也不少。如果您仍然允许任意查询,那么只需直接利用您的上下文,因为您实际上并没有购买任何其他内容来维护,而没有真正的好处。