【问题标题】:Entity Framework - ASP.NET Core Include function returns nested relationshipsEntity Framework - ASP.NET Core Include 函数返回嵌套关系
【发布时间】:2020-06-30 02:06:48
【问题描述】:

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

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

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

课程类

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

【问题讨论】:

    标签: sql-server asp.net-core asp.net-web-api entity-framework-core c#-3.0


    【解决方案1】:

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

    关闭Change Tracking,当然还要确保延迟加载已禁用。 EG

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

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

    【讨论】:

    • 嘿!我是asp.net的新手,你能给我一段具体的代码来禁用它吗?我很难找到它。谢谢!
    • 它的工作并不完全。当我使用 ThenInclude() 时,它会继续循环。
    猜你喜欢
    • 1970-01-01
    • 2019-02-05
    • 2022-08-02
    • 2019-08-16
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多