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中的延迟加载并不方便。
我一直在尝试在 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中的延迟加载并不方便。