2017-06-27 11 views
1

私はEntity Frameworkを学ぶための簡単なアプリケーションを構築しています。おおよそthisthisのチュートリアルに従います。Entity Frameworkスキャフォールドと関連データ

私は正常にコードを作成した後、クエリを実行して、予期されるデータと、シードされたデータとの一対一の関係の正しいキーを確認できます。

public class Organization 
{ 
    public Organization() 
    { 
     Members = new HashSet<Member>(); 
    } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Member> Members { get; set; } 
} 

public class Member 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID { get; set; } 

    public string Name { get; set; } 
    public string Note { get; set; } 

    public Guid OrganizationID { get; set; } 
    public virtual Organization Organization { get; set; } 

} 

public class OrganizationMemberContext : DbContext 
{ 
    public OrganizationMemberContext(DbContextOptions<OrganizationMemberContext> options) : base(options) 
    { 

    } 
    public DbSet<Organization> Organizations { get; set; } 
    public DbSet<Member> Members { get; set; } 
} 

私はOrganizationMemberContextを使用してOrganizationモデルのための足場コントローラを作成する上で続け、それは美しく動作します。 CRUD操作は期待どおりに動作しているようです。

私は、その組織の各組織のメンバーリストをインデックスページに表示したかったのです。しかし、私が考えるべきことは、動くべきだと思うものは、関連するデータを返しません

public async Task<IActionResult> Index() 
{ 
    _context.Organizations.Include(x => x.Members); 
    return View(await _context.Organizations.ToListAsync()); 
} 

私は組織のリストを取得しますが、各組織のメンバープロパティは、(VSで地元の人々を見て確認)ページに送信されたモデルでは空です。

再び、播種データが正しく挿入されている:私は予想通りOrganization.ID値を正確Member.OrganizationID値と一致するDBで見ることができます。

+3

これはあなたのために働く可能性があります 公共タスクインデックス(){ リターンビュー(のawait _context.Organizations.Include非同期(x =>。メンバー).ToListAsync()); } – Sarbanjeet

+1

クエリ内部のインクルードを試してください。 _context.Orgranizations.Include(x => x.Members).ToListASync()); – uk2k05

+0

インクルードは最初のステートメントで呼び出され、ビューをレンダリングする2番目のステートメントではありません –

答えて

1

オリジナルコード

public async Task<IActionResult> Index() 
{ 
    _context.Organizations.Include(x => x.Members); // use include with no additional queries 
    return View(await _context.Organizations.ToListAsync()); // made a new query - it knows nothing about include part - Lazy loading still in effect 
} 

は次のようになります。

public async Task<IActionResult> Index() 
{ 
    return View(await _context.Organizations.Include(x => x.Members)ToListAsync()); // query see include and add this information in the result 
} 
関連する問題