首页 > 解决方案 > 通用存储库中的 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 作为参数传递?

标签: c#ef-core-3.1

解决方案


您可以使用包含的字符串版本

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")

推荐阅读