2016-04-30 7 views
0

私はEFの周りに頭を抱えようとしています。EFレイジーロードコレクション

私は、このエンティティ

public class Project : IEntity 
{ 
    public int Id { get; set; } 
    public String Title { get; set; } 
    public String Description { get; set; } 
    public int ProjectTypeId { get; set; } 
    public string UserId { get; set; } 
    public bool Active { get; set; } 
    public int ProjectStatusId { get; set; } 

    public virtual ICollection<WorkItem> WorkItems { get; set; } 
    public ProjectType ProjectType { get; set; } 
    public ProjectStatus ProjectStatus { get; set; } 
} 

私は遅延ロードするコレクション「作業項目」を希望しているが、プロジェクトタイプとプロジェクトのステータスは、フロントをアップロードする必要があります。

私はこれをどのように設定するのですか?SQLプロファイラをインストールせずに、それが怠惰な読み込みや読み込みをどのようにして見えるのか

NB私はあなたのようになりますコンテキストを持っていると仮定すると、シリアル化の理由から

おかげ

答えて

0

を遅延ロードの虚偽を設定している:

public DbSet<Project> Projects { get; set; } 

その後、呼び出すことができます。

MyContext db = new MyContext(); 
db.Projects.Include(x => x.ProjectType).Include(y => y.ProjectStatus).Where... 

これはProjectTypeとProjectStatusを読み込みますが、WorkIは読み込めません。テムズ。あなたは、EFは、デバッグウィンドウにログ出力を取ることによって、シーンの裏で何を行っているかを確認することができます

db.Database.Log = s => System.Diagnostics.Debug.WriteLine(s); 

はSystem.Data.Entityを使用して置くことを忘れないでください。そうでなければ、あなたのインクルードでラムダ式を使うことはできません。

データレイヤーのユーザーにProjectTypeとProjectStatusが常にロードされていることを確認するには、DbSetの代わりに独自のリポジトリを実装することを検討してください。

これが役に立ちます。