我一直在嘗試在 ASP.NET Core 6 中使用延遲加載,我已按照檔案進行操作。但是,延遲加載的行為與檔案中描述的不同
延遲加載是指在訪問導航屬性時,透明地從資料庫中加載相關資料。這里
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 核心正在加載我不需要的資料,這有點像急切加載但有兩個查詢。
uj5u.com熱心網友回復:
經過調查,我意識到 AutoMapper 正在訪問作者,這就是它總是檢索作者資料的原因。
因此,目前 EFCore 中的延遲加載并不方便。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475991.html
下一篇:無法確定“ICollection<Product>”型別的導航“Customer.BoughtProducts”表示的關系
