我正在尝试通过确保仅渴望加载模型来解决Entity Framework Core 2.1项目的n + 1问题。
我遇到的问题是某些相关模型正在被延迟加载,而其他模型则没有。需要明确的是,我根本不需要延迟加载任何东西,也没有明确启用它。我不认为这是预期的行为。
例如,当我运行以下代码时,它将按预期返回所有包含的数据。
List<User> users = _context.Users
.Include(u => u.Engine)
.Include(u => u.ClientType)
.Include(u => u.Organization)
.Include(u => u.Role)
.ToList();
但是,如果我删除所有包含,则列表中约90%的用户仍将包含其关联数据。我相信这就是为什么尽管使用了急切加载但还是遇到n + 1问题的原因。
为什么只有某些相关模型是延迟加载的?如果我没有启用任何东西,为什么它们会被延迟加载?尽管我仅尝试使用紧急加载,但这可能是我的n + 1问题的根本原因吗?
答案 0 :(得分:1)
默认情况下,EF Core不启用延迟加载。您必须明确选择加入它,然后将导航属性标记为virtual
。如果您不想延迟加载,请确保您的OnConfiguring
方法不会调用UseLazyLoadingProxies()
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
// .UseLazyLoadingProxies() <- Only use this to enable lazy loading.
.UseSqlServer(myConnectionString);