【发布时间】:2021-05-10 11:31:31
【问题描述】:
我正在处理一个以.net 5 和Entity framework core 为目标的Asp,net core 5 项目。
我有这些实体:
学生:
[ Key ] public string Id { get; set; }
[ Required ] public string FirstName { get; set; }
[ Required ] public string FamilyName { get; set; }
[ Required ] public DateTime BirthDate { get; set; }
[ Required ] public string BirthPlace { get; set; }
[ Required ] public Gender Gender { get; set; }
[ Required ] public Nationality Nationality { get; set; }
[ Required ] public string Address { get; set; }
[ Required ] public DateTime DateOfRegistration { get; set; }
[ Required ] public int StudyLevelId { get; set; }
[ Required ] [ForeignKey( nameof(AcademicYear))] public string AcademicYearOfRegistration { get; set; }
[ Required ] public string GroupId { get; set; }
[ Phone ] public string PhoneNumber { get; set; }
[ EmailAddress ] public string Email { get; set; }
public string FullName => $"{FirstName} {FamilyName}";
public string NationalId { get; set; }
public string PassportId { get; set; }
public string ResideneCardId { get; set; }
public string StudentGuardianId { get; set; }
public byte[] Picture { get; set; }
public virtual StudentGuadian StudentGuadian { get; set; }
public virtual StudyLevel StudyLevel { get; set; }
public virtual AcademicYear AcademicYear { get; set; }
public virtual Group Group { get; set; }
public virtual ICollection<StudentAbsence> Absences { get; set; }
public virtual ICollection<TestMark> TestMarks { get; set; }
public virtual ICollection<ExamMark> ExamMarks { get; set; }
public virtual ICollection<StudentPayment> Payements { get; set; }
public virtual ICollection<StudentMonthlyPayement> MonthlyPayements { get; set; }
public virtual StudentTrainingMark TrainingMark { get; set; }
public virtual StudentProjectMark ProjectMark { get; set; }
public virtual ICollection<StudentYearlyResult> YearlyResults { get; set; }
public virtual StudentDiplomaResult DiplomaResult { get; set; }
学生缺席:
[ Key ] [ DatabaseGenerated( DatabaseGeneratedOption.Identity ) ] public int Id { get; set; }
[ Required ] public DateTime AbsenceDate { get; set; }
[ Required ] public TimeSpan AbsenceTime { get; set; }
[ Required ] public bool IsJustified { get; set; }
[ Required ] public string StudentId { get; set; }
[ Required ] public string SchoolSubjectId { get; set; }
public byte[] DocOfJustify { get; set; }
public string Note { get; set; }
public string Reason { get; set; }
public virtual Student Student { get; set; }
public virtual SchoolSubject SchoolSubject { get; set; }
public string CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public bool IsEdited { get; set; }
public string LastEditor { get; set; }
public DateTime LastEditDate { get; set; }
学科:
[Key]
public string Id { get; set; }
[Required]
public string FullTitle { get; set; }
[Required]
public string Coefficient { get; set; }
[Required]
public byte NumberOfTests { get; set; }
[Required]
public SchoolSubjectStatus Status { get; set; }
[Required]
public string BrancheId { get; set; }
[Required]
public string SemesterId { get; set; }
[Required]
public byte FormationYearId { get; set; }
public virtual Branche Branche { get; set; }
public virtual Semester Semester { get; set; }
public virtual FormationYear FormationYear { get; set; }
public virtual ICollection<PedagogicalSequence> PedagogicalSequences { get; set; }
public virtual ICollection<StudentAbsence> StudentAbsences { get; set; }
public virtual ICollection<Test> Tests { get; set; }
public virtual ICollection<Exam> Exams { get; set; }
public virtual ICollection<GroupProfSubject> Professors { get; set; }
public virtual ICollection<ProfAbsence> ProfAbsences { get; set; }
形成年:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public byte Id { get; set; }
[Required]
public string Title { get; set; }
public virtual ICollection<SchoolSubject> SchoolSubjects { get; set; }
有什么问题?
在一个方法中,我得到一个student 对象,我加载了他所有的Absences,我还尝试加载Absence.SchoolSubject 属性(来自Absence)和Absence.SchoolSubject.FormationYear 属性(来自Absence)
但我收到一条错误消息,他总结说 Absence.SchoolSubject 和 Absence.SchoolSubject.FormationYear 属性是 Null 并且未加载。
我尝试了什么:
Context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.TrackAll;
IQueryable<Student> query = Context.Set<Student>().Where( s => s.Id == pkValue );
query.Include( s => s.Group ).Include( s => s.Group.Branche )
.Include( s => s.Group.FormationYear )
.Include( s => s.StudentGuadian ).Include( s => s.Absences )
.Include( s => s.Absences.First().SchoolSubject )
.Include( s => s.Absences.First().SchoolSubject.FormationYear )
.Load();
return query.FirstOrDefault();
Context 是 DbContext 对象。
我知道这不是为 Student 对象加载 Absence 嵌套导航属性的正确方法,请帮助解决此问题?
【问题讨论】:
标签: c# asp.net-core entity-framework-core .net-5