2016-07-11 8 views
-1

Ich habe zwei Einheiten Session und Student, und eine Join-Entität StudentSessions.Load related Daten in einer vielen Beziehung

Jetzt habe ich einen Profil-Bildschirm, der alle Daten des ausgewählten Studenten abfragen muss.

Student.cs

public class Student 
{ 
    public long ID { get; set; } 
    public string ChildName { get; set; } 
    public DateTime ChildDOB { get; set; } 
    public DateTime AdmissionDate { get; set; } 
    /* removed for brewity*/ 

    public string Address { get; set; } 

    public Lead Source { get; set; } 
    public Session CurrentSession 
    { 
     get 
     { 
      return (StudentSessions != null && StudentSessions.Any(x => x.Session.IsCurrentlyRunning)) 
       ? StudentSessions.First(x => x.Session.IsCurrentlyRunning).Session : null; 
     } 
    } 

    public List<StudentSession> StudentSessions { get; set; } 
} 

Session.cs

public class Session 
{ 
    public long ID { get; set; } 
    public DateTime SessionStart { get; set; } 
    public DateTime SessionEnd { get; set; } 
    public string Class { get; set; } 
    public bool IsCurrentlyRunning { get { return SessionEnd == null || SessionEnd > DateTime.UtcNow; } } 

    public Teacher AssignedTeacher { get; set; } 
    public List<Staff> AssignedStaff { get; set; } 
    public List<StudentSession> StudentSessions { get; set; } 
} 

StudentSession.cs

public class StudentSession 
{ 
    public long ID { get; set; } 
    public long StudentID { get; set; } 
    public long SessionID { get; set; } 

    public Student Student { get; set; } 
    public Session Session { get; set; } 

    public List<SessionTerm> SessionTerms { get; set; } 
} 

StudentController.cs

public class StudentController : Controller 
{ 
    MasterContext db; 

    public StudentController(MasterContext dbcontext) { db = dbcontext; } 

    public async Task<IActionResult> Index([FromRoute]long ID, [FromQuery]string view, [FromQuery]int page) 
    { 
     IQueryable<Student> studentqry; 
     switch (view) 
     { 
      case "ListAll": 
       studentqry = from s in db.Students select s; 
       return View(viewName: view, model: await studentqry.OrderByDescending(x => x.AdmissionDate).Skip(page * 50).Take(50).ToListAsync()); 
      case "Create": 
      case "Profile": 
       studentqry = (from s in db.Students where s.ID == ID select s) 
        .Include(x => x.Source).ThenInclude(x=>x.Interactions) 
        .Include(x => x.StudentSessions); 
       return View(viewName: view, model: await studentqry.SingleAsync()); 
      case "Edit": 
      case "EditInteraction": 
      case "ListInteractions": 
      default: return View(viewName: "Default"); 
     } 
    } 
} 

Seit StudentSessions in Studenten eine Eins-Beziehung hat, kann ich die entsprechenden Sitzungsdaten mit ThenInclude in StudentSessions für alle StudentSessions von Studenten nicht geladen werden.

Ich habe versucht, Dokumente zu lesen und auf Google suchen, aber aufgrund der Tatsache, dass Entity-Framework Core relativ neu ist, ist nicht viel Hilfe im Moment verfügbar. Jede Hilfe wird sehr geschätzt.

+0

Vielleicht '.Include (x => x.StudentSessions) .ThenInclude (x => x.Session);'? Der Kern Ihres Problems ist mir nicht wirklich klar. – grek40

+0

@ grek40 gibt es keine .ThenInclude (x => x.Session) Ich habe die Frage entsprechend aktualisiert –

+0

Dies sollte eigentlich für Sammlungen arbeiten, so kann Ihr Problem etwas anderes sein. – grek40

Antwort

1

Es stellte sich heraus, ein Problem mit Visual Studio Intellisense, Schreiben der Navigationseigenschaft, kompiliert und funktionierte perfekt.

.Include(x => x.StudentSessions).ThenInclude(x => x.Session) 
+0

verbrachte 2 Stunden wegen dieses Dankes für das Hinzufügen der Antwort. – causita

Verwandte Themen