私はEFモデルを最初にPOCOエンティティとカスタムDbContextで使用しています。私の問題は、LazyLoadingEnabled=false
の設定は何にも影響しないことです。ナビゲーションプロパティはまだ読み込まれています。 以下は私の例を簡略化したものです。LazyLoadingEnabled設定がEF 5で機能しないようです
エンティティプログラム。
namespace Domain.Entities
{
using System;
using System.Collections.Generic;
public partial class Program
{
public Program()
{
this.Programs = new HashSet<Program>();
}
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public System.DateTime StartDate { get; set; }
public System.DateTime EndDate { get; set; }
public Nullable<int> ProgramId { get; set; }
public virtual ICollection<Program> Programs { get; set; }
public virtual Program OwnerProgram { get; set; }
}
}
DbContext:プログラムが他のプログラムの一部にすることができます。ここ
namespace Infrastructure.Model
{
public class ProgramContext : DbContext
{
public ProgramContext()
: base("name=MyContainer")
{
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Program> Programs { get; set; }
}
}
が、私はそれを使用する方法です:
上記のサンプルではprivate ProgramContext _dbContext = new ProgramContext();
// GET api/program
public IEnumerable<Program> GetPrograms()
{
List<Program> list = _dbContext.Programs.ToList();
return list;
}
、EFはまだプログラムをロードしますProgramクラスのOwnerProgramプロパティを使用します。仮想キーワードを削除しようとしましたが、プロキシの作成を無効にして、モデル自体にLazyLoadingEnabled=false
を確認しました。
何か不足していますか?
ありがとう、これは私が見ているものです。 .Include()を使用していない限り、EFでナビゲーションプロパティを読み込まないようにする方法はありますか? – gixen
@gixen:言われたように、実際には「読み込み中」ではありません。リレーションシップフィックスアップは、すでに読み込まれているナビゲーションコレクションと参照にエンティティを配置します。したがって、クエリのオーバーヘッドはありません。読み込み後にエンティティを変更する場合は、変更の追跡が必要で、この動作を無効にすることはできません。読み取り専用の状況で変更を追跡することなく、 '_dbContext.Programs.AsNoTracking()。ToList()'を試すことができます。しかし、この場合に役立つかどうかはわかりません。 – Slauma
私がこの答えを得ているのは、オープン・コンテキストで遅延ロード・ナビゲーション・プロパティーを使わずにオブジェクト・グラフ全体をEFにロードする方法がないことです。 OR .Include( "NavigationProtperyName")はナビゲーションプロパティを読み込むために明示的に呼び出すことができますが、各クエリで必要です。 –