EFCore 中的延迟加载即使未访问也会加载所有数据

Lazy loading in EFCore loads all the data even if not accessed

我一直在尝试在 ASP.NET 核心 6 中使用延迟加载,我已按照文档进行操作。但是,延迟加载的行为与文档中描述的不同

Lazy loading means that the related data is transparently loaded from the database when the navigation property is accessed. Here

builder.Services.AddDbContext<AppDbContext>(
    options => options.UseLazyLoadingProxies()
     .UseSqlServer(builder.Configuration.GetConnectionString("Default")));

目前我有以下实体

    public class Book 
    {
        public long Id { get; set; }
        public string Name { get; set; }

        public long AuthorId { get; set; }
        public virtual Author Author { get; set; }
    }

    public class Author
    {
        public long Id { get; set; }
        public string Name { get; set; }
    }

我有这个端点

[HttpGet]
public IEnumerable<Book> GetBooks()
  {
      var list = _appDbContext.Books.ToList();
      return list;
  }

结果 SQL 查询是

SELECT [b].[Id], [b].[AuthorId], [b].[Name]
FROM [Books] AS [b]


SELECT [a].[Id], [a].[Name]
FROM [Author] AS [a]
WHERE [a].[Id] = @__p_0

所以在端点中,我没有访问 Book 实体中的 属性 Author,那么为什么 ef core 正在加载我不需要的数据,它有点像急切加载但有两个查询。

经过调查,我意识到 AutoMapper 正在访问作者,这就是它总是检索作者数据的原因。

因此,目前EFCore中的延迟加载并不方便。