c# - 通用存储库中的 Ef 核心包含多对多
问题描述
我在数据库中有多对多的关系。GetAll 方法在EF Core中预加载的典型实现是:
dbContext
.DbSet<Book>
.Include(e => e.BooksAuthors)
.ThenInclude(ba => ba.Author)
但在通用存储库的情况下,我将params Expression<Func<T, object>>[] includes
作为参数传递给 GetAll。
但问题是,在
public static IQueryable<T> IncludeMultiple<T>(
this IQueryable<T> query,
params Expression<Func<T, object>>[] includes)
where T : class
{
if (includes != null)
{
query = includes.Aggregate(query,
(current, include) => current.Include(include));
}
return query;
}
我只能加载 BooksAuthors,不能加载下一层嵌套。如何将 ThenInclude 作为参数传递?
解决方案
您可以使用包含的字符串版本
public static IQueryable<T> IncludeMultiple<T>(
this IQueryable<T> query,
params string[] includes)
where T : class
{
if (includes != null)
{
query = includes.Aggregate(query,
(current, include) => current.Include(include));
}
return query;
}
你的包括将是
dbContext.DbSet<Book>.IncludeMultiple("BooksAuthors.Author")
推荐阅读
- php - 正确格式化 DATA 的 STR_TO_DATE 错误
- wordpress - Service Worker 工作箱使请求翻倍
- python - 尽管已定义,但我不断收到“未定义”
- ios - Flutter AppBar 前导文本
- r - R Boruta - 将数据框与列名确认的特征合并
- python - 为什么在 python 中动态更改日志级别不起作用
- html - HTML / CSS | 滚动条 - 更改 div 和拇指悬停的颜色
- operating-system - 操作系统如何处理外围数据缓冲区?
- flutter - 连续两列自动缩放图像?
- angular - 单元测试中未调用 setTimout 中的函数