How to Turn off lazy loading for all entities in Entity Framework

By FoxLearn 8/1/2024 2:38:36 AM   305
Turning off lazy loading in Entity Framework (EF) is useful when you want to avoid performance issues or control the loading behavior of your entities more explicitly.

Lazy loading is a feature that automatically loads related entities from the database when they are accessed for the first time. However, it can sometimes lead to performance problems, such as the N+1 query problem.

How to turn off lazy loading in Entity Framework Core and Entity Framework

In EF6, lazy loading is enabled by default but can be turned off by setting the LazyLoadingEnabled property of the DbContext.

Set the LazyLoadingEnabled property of your DbContext to false in the constructor or configuration.

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
    {
        this.Configuration.LazyLoadingEnabled = false;
    }
}

If you want to do with an explicit call.

var post = context.Posts.Find(1);

// Load the blog related to a given post.
context.Entry(post).Reference(p => p.Blog).Load();

var blog = context.Blogs.Find(1);

// Load the posts related to a given blog.
context.Entry(blog).Collection(p => p.Posts).Load();

In EF Core, lazy loading is managed through proxies and can be turned off by not using them or by configuring your DbContext not to use them.

By default, EF Core does not enable lazy loading. However, if lazy loading proxies are used, you need to ensure they are not enabled.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))
               .UseLazyLoadingProxies(false)); // Disable proxies if previously enabled
}

Note: UseLazyLoadingProxies is used to enable lazy loading proxies. By not using this method or explicitly setting it to false, lazy loading will be off.