实体框架-ASP.NET Core Include函数返回嵌套关系



Include((方法通常应该返回特定对象的列表,但奇怪的是,它甚至不使用TheIninclude((就返回了所有嵌套对象。我应该如何阻止这些嵌套对象?

return Db.Courses.Include(x => x.Program).ToList();

这应该返回带有程序对象的课程列表,但也返回Programs对象中也存在的课程对象。如何打破这个循环?

课程类别

public Courses()
{
CourseCoReqsCoRequisiteCourse = new HashSet<CourseCoReqs>();
CourseCoReqsCourse = new HashSet<CourseCoReqs>();
CourseGroupCourses = new HashSet<CourseGroupCourses>();
CoursePreReqsCourse = new HashSet<CoursePreReqs>();
CoursePreReqsPreRequisiteCourse = new HashSet<CoursePreReqs>();
CurriculumCoursePrerequisite = new HashSet<CurriculumCoursePrerequisite>();
EquivalenceCourses = new HashSet<EquivalenceCourses>();
SemesterCourses = new HashSet<SemesterCourses>();
StudentCourses = new HashSet<StudentCourses>();
}
public int CourseId { get; set; }
public string CourseNumber { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Credits { get; set; }
public bool? NormallyOfferedFall { get; set; }
public bool? NormallyOfferedSpring { get; set; }
public bool? NormallyOfferedSummer { get; set; }
public bool? NormallyOfferedWinterInt { get; set; }
public bool? NormallyOfferedSpringInt { get; set; }
public bool? NormallyOfferedSummerInt { get; set; }
public bool? IsActive { get; set; }
public bool? IsElective { get; set; }
public int ProgramId { get; set; }
public string Rules { get; set; }
public virtual Programs Program { get; set; }
public virtual ICollection<CourseCoReqs> CourseCoReqsCoRequisiteCourse { get; set; }
public virtual ICollection<CourseCoReqs> CourseCoReqsCourse { get; set; }
public virtual ICollection<CourseGroupCourses> CourseGroupCourses { get; set; }
public virtual ICollection<CoursePreReqs> CoursePreReqsCourse { get; set; }
public virtual ICollection<CoursePreReqs> CoursePreReqsPreRequisiteCourse { get; set; }
public virtual ICollection<CurriculumCoursePrerequisite> CurriculumCoursePrerequisite { get; set; }
public virtual ICollection<EquivalenceCourses> EquivalenceCourses { get; set; }
public virtual ICollection<SemesterCourses> SemesterCourses { get; set; }
public virtual ICollection<StudentCourses> StudentCourses { get; set; }
}

程序类别:

public partial class Programs
{
public Programs()
{
Courses = new HashSet<Courses>();
Curricula = new HashSet<Curricula>();
People = new HashSet<People>();
ProgramCourseGroups = new HashSet<ProgramCourseGroups>();
Roles = new HashSet<Roles>();
}
public int ProgramId { get; set; }
public int DepartmentId { get; set; }
public string ProgramCode { get; set; }
public string ProgramName { get; set; }
public bool? IsActive { get; set; }
public bool? IsMinor { get; set; }
public virtual Departments Department { get; set; }
public virtual ICollection<Courses> Courses { get; set; }
public virtual ICollection<Curricula> Curricula { get; set; }
public virtual ICollection<People> People { get; set; }
public virtual ICollection<ProgramCourseGroups> ProgramCourseGroups { get; set; }
public virtual ICollection<Roles> Roles { get; set; }
}

这应该返回带有程序对象的课程列表,但它也返回Programs对象中也存在的课程对象。如何打破这个循环?

关闭"更改跟踪",当然,还要确保禁用"延迟加载"。例如

return Db.Courses
.AsNoTracking()
.Include(x => x.Program)
.ToList();

"更改跟踪器"在加载对象时修复"导航属性"。

最新更新