有没有办法在Entity Framework 6上禁用延迟加载特定查询?我想定期使用它,但有时我想禁用它。我正在使用虚拟属性来延迟加载它们。
在要执行的查询之前设置以下代码
context.Configuration.LazyLoadingEnabled = false;
您可以为特定查询禁用延迟加载,如下所示:
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;
}
}
}
我可能在这里遗漏了一些东西,但不是每次都改变配置,可能另一种方法是仅在那些你想要加载的查询上使用.Include()
吗?
假设我们有一个Product
类,它具有Colour
类的导航属性,你可以加载Colour
这样的Product
-
var product = _context.Products
.Where(p => p.Name == "Thingy")
.Include(x => x.Colours)
.ToList();
转到图属性并找到指定为延迟加载的属性并将其禁用。
如果您首先使用代码,请转到配置区域并从那里禁用它:
this.Configuration.LazyLoadingEnabled = false;
在EF核心:context.ChangeTracker.LazyLoadingEnabled = false;
对于this answer。
假设你有这个:
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);
}
尽管没有明确设置,你仍然会得到延迟加载。修复很简单,将其更改为:
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();
}