У меня есть два объекта Session
и Student
и объект объединения StudentSessions
.Загрузка связанных данных в одном большом отношении
Теперь у меня есть экран профиля, который должен запрашивать все данные выбранного студента.
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");
}
}
}
Поскольку StudentSessions в Student оказывает один-многим, я не могу загрузить связанные данные сеанса работы с помощью ThenInclude в StudentSessions для всех StudentSessions студента.
Я пробовал читать документы и искать в google, но из-за того, что Entity-Framework Core относительно новый, на данный момент не так много справки. Любая помощь высоко ценится.
Возможно '.Include (x => x.StudentSessions) .ThenInclude (x => x.Session);'? Ядро вашей проблемы не совсем понятно для меня. – grek40
@ grek40 нет .ThenInclude (x => x.Session) Я обновил вопрос соответственно –
Это действительно должно работать для коллекций, поэтому ваша проблема может быть чем-то другим. – grek40