如何在 DotNet6 中为 certaion 查询启用延迟加载,因为启用它 gloablly 会引入 n+1 问题和

Hui Liu-MSFT 47,341 信誉分 Microsoft 供应商
2024-06-03T07:46:47.6033333+00:00

我是 dotnet6 的新手,请让我磕头如何在 dotnet6 中为 certaion 查询启用延迟加载,因为启用它会 gloablic 引入 n+1 问题并降低性能,我希望 thisto 在某些情况下启用

Note:此问题总结整理于:how to enable lazy loading in dotnet6 for certaion queries as enabling it gloablly intruduces n+1 problem and

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
49 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 43,046 信誉分 Microsoft 供应商
    2024-06-03T09:13:26.9+00:00

    可以使用 ChangeTracker.LazyLoadingEnabled 属性,下面是一个简单的示例。

    可以先在 DbContext 类的构造函数中设置此项:

    public class BlogDbContext : DbContext
    {
         public DbSet<Blog> Blogs { get; set; }
         public DbSet<Post> Posts { get; set; }
         public BlogContext()
         {
             //Set the default value to false
             this.ChangeTracker.LazyLoadingEnabled = false;
         }
    }
    

    这将关闭全局延迟加载

    然后,将此添加到要启用延迟加载的代码中:

    using (var context = new BlogDbContext())
    {
         // Enable lazy loading only in this query
         context.ChangeTracker.LazyLoadingEnabled = true;
         //Execute query
         var blogs = context.Blogs.ToList();
         // Perform other operations, lazy loading is enabled here
         // Disable lazy loading again
         context.ChangeTracker.LazyLoadingEnabled = false;
    }
    

    这样,您可以通过设置

    ChangeTracker.LazyLoadingEnabled。

    使用上述代码时无法禁用延迟加载吗?如果是这样,请尝试使用这样的代码:

    public class BlogDbContext : DbContext
    {
         public DbSet<Blog> Blogs { get; set; }
         public DbSet<Post> Posts { get; set; }
         public BlogContext()
         {
             //Set the default value to false
             this.ChangeTracker.LazyLoadingEnabled = false;
         }
    }
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助