2017-06-27 4 views
1

Ich baue eine einfache App, um Entity Framework zu lernen, grob nach this und this Tutorials.Entity Framework Scaffold und zugehörige Daten

Ich habe erfolgreich Code-zuerst erstellt meine Tabellen, ich kann sie abfragen und sehen die erwarteten Daten und die richtigen Schlüssel für meine Eins-zu-viele-Beziehung mit meinen gesetzten Daten.

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

ich weiterhin auf eine eingerüstete Controller für das Organization Modell zu erstellen, die OrganizationMemberContext mit, und das funktioniert wunderbar. CRUD-Vorgänge scheinen wie erwartet zu funktionieren.

Ich wollte dann die Liste der Organisationen jeder Organisation unter dieser Organisation auf der Indexseite anzeigen. Jedoch ... was ich denke sollte funktionieren, gibt keine verwandten Daten zurück.

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

ich die Liste der Organisationen, aber jedes Mitglieder der Organisation Eigenschaft ist leer im Modell auf die Seite gesendet (bestätigt Einheimischen in VS zu beobachten).

Auch hier werden die gesetzten Daten korrekt eingefügt: Ich kann in der DB sehen, wo Organization.ID Werte wie erwartet mit den Member.OrganisationID-Werten übereinstimmen.

+3

Dies kann für Sie arbeiten: öffentlichen async Aufgabe Index() { return View (await _context.Organizations.Include (x =>. Mitglieder) .ToListAsync()); } – Sarbanjeet

+1

versuchen Sie das Include in der Abfrage selbst. _context.Orgranizations.Include (x => x.Members) .ToListASync()); – uk2k05

+0

Das Include heißt in der ersten Anweisung, nicht in der zweiten, wo Sie die Ansicht rendern –

Antwort

1

Originalcode

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 
} 

Sollte sein:

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 
}