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 Coreの場合:context.ChangeTracker.LazyLoadingEnabled = false;
この回答 ごと。
これがあるとします:
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);
}
Toを明示的に設定していても、遅延読み込みを取得できます。修正は簡単です。これに変更してください。
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();
}