Is there any way to disable lazy loading for specific query on Entity Framework 6? I want to use it regularly, but sometimes I want to disable it. I'm using virtual properties to lazy load them.
9 Answers
set the following code before the query you want to execute
context.Configuration.LazyLoadingEnabled = false;
1 Comment
virtual, and then use include() whenever you want the loading to be non-lazy. Don't forget to add using System.Data.Entity;You can disable Lazy loading for a specific query as follows :
public static Cursos GetDatosCursoById(int cursoId)
{
using (var bd = new AcademyEntities())
{
try
{
bd.Configuration.ProxyCreationEnabled = false;
return bd.Cursos.FirstOrDefault(c => c.cursoId == cursoId);
}
catch (Exception ex)
{
return null;
}
}
}
Comments
I might be missing something here, but rather than changing the configuration each time, might another approach be to use .Include() on only those queries where you want to eager load?
Suppose we have a Product class which has a navigation property to a Colour class, you might load the Colour for a Product like this -
var product = _context.Products
.Where(p => p.Name == "Thingy")
.Include(x => x.Colours)
.ToList();
7 Comments
In EF Core: context.ChangeTracker.LazyLoadingEnabled = false;
Per this answer.
2 Comments
Go to your diagram properties and find a property designated to lazy loading and disable it.
If you are using code first then go to your config area and disable it from there with:
this.Configuration.LazyLoadingEnabled = false;
1 Comment
Suppose you have this:
IOrderedQueryable<Private.Database.DailyItem> items;
using (var context = new Private.Database.PrivateDb())
{
context.Configuration.LazyLoadingEnabled = false;
items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite);
}
You'd still get lazy loading, despite the explicit setting of not to. The fix is easy, change it to this:
List<Private.Database.DailyItem> items;
using (var context = new Private.Database.PrivateDb())
{
// context.Configuration.LazyLoadingEnabled = false;
items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite).ToList();
}
Comments
For EF Core to make it simple with a method you can use this helper:
public static AppDbContext DisableLazyLoading(this AppDbContext dbcontext)
{
dbcontext.ChangeTracker.LazyLoadingEnabled = false;
return dbcontext;
}
Using
return dbcontext.DisableLazyLoading().Branches.Find(course.BranchId);
1 Comment
AsNoTracking, which does change behavior for one query). In reality, it just executes the query exactly as it would with LL enabled, but it turns LL off on the context for the rest of its lifetime. The way it can be used is deceptive.
this.Configuration.LazyLoadingEnabled = false;, then set it againthis.Configuration.LazyLoadingEnabled = true;? Also, you can read this msdn.microsoft.com/en-us/data/jj574232.aspx