web-dev-qa-db-ja.com

Entity Framework:特定のクエリの遅延読み込みを無効にする方法は?

Entity Framework 6で特定のクエリの遅延読み込みを無効にする方法はありますか?定期的に使用したいが、時々無効にしたい。私はそれらを遅延ロードするために仮想プロパティを使用しています。

73
Marco Alves

実行するクエリの前に次のコードを設定します

context.Configuration.LazyLoadingEnabled = false;
67
Karthik Ganesan

次のように、特定のクエリの遅延読み込みを無効にできます。

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;
        }
    }
}
38

私はここで何かを見逃しているかもしれませんが、毎回構成を変更するのではなく、熱心にロードしたいクエリだけで.Include()を使用する別のアプローチがありますか?

Productクラスへのナビゲーションプロパティを持つColourクラスがあるとします。次のようにColourProductをロードします-

var product = _context.Products
    .Where(p => p.Name == "Thingy")
        .Include(x => x.Colours)
        .ToList();
18
Parrybird

ダイアグラムのプロパティに移動し、遅延読み込みに指定されたプロパティを見つけて無効にします。

最初にコードを使用している場合は、設定エリアに移動し、そこから無効にします:

this.Configuration.LazyLoadingEnabled = false;
15
Juan

EF Coreの場合:context.ChangeTracker.LazyLoadingEnabled = false;

この回答 ごと。

5
Matt Jenkins

これがあるとします:

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();
}
1
Stronghold