【问题标题】:Create CRUD for a self-referencing with Entity Framework 6.1 and MVC5使用 Entity Framework 6.1 和 MVC5 为自引用创建 CRUD
【发布时间】:2016-09-15 22:10:31
【问题描述】:

我是 Entity Framework 的新手,但我正在使用 EF 6.1 和 MVC5 并尝试构建一个与自身相关的 Course 实体(Course 具有一对一的 pre-req 课程或一对多)。如何使用 EF 和 CRUD 功能实现这一点?

我的模型如下:物理模型有一个与Course 匹配的Course 表和一个有3 列的prereq 表:prereqIdcourseNopreReqCourseNo

public class Course
{
    public int CourseId { get; set; }
    public string CourseNumber { get; set; }
    public string CourseName { get; set; }
    public decimal Credits { get; set; }
    public bool? PreReq { get; set; }
    public virtual ICollection<DeptCourse> DeptCourse  { get; set; }
    public virtual ICollection<Course> PreReq { get; set; }
}

目标是能够在创建页面中定义这些属性,以便用户可以从下拉列表中选择一个或多个课程编号,并使用它们之间的关系更新两个表。一门课程可以有一个或多个前提课程。谢谢你。

【问题讨论】:

  • 我已经有一段时间没有这样做了,但这不是多对多(例如,多门课程可能是多门不同课程的要求?)无论如何,您可能想要添加一个“IsPreReqFor”互惠属性,因此您可以在任一方向导航。毫无疑问,很快就会有人给你外键的语法
  • 我确实有一个用于 prereq 复选框的布尔值,如果用户选择它,我会提供一个部分视图,其中包含可供选择的课程下拉列表。
  • 我的意思是走另一条路……说当然 X 需要 A、B、C,而课程 Y 需要 A、C、F。看课程 C 时能够说出来可能会很好“本课程是 X 和 Y 的要求”。不需要额外的数据,只需能够在任一方向导航“需求”约束即可。
  • 到底是什么问题?您是否在寻求编码 CRUD 部分的帮助?如果是这样,请出示您现有的代码。

标签: c# entity-framework asp.net-mvc-5


【解决方案1】:

正如 Basic 所建议的,我认为这确实是一个多对多的关系。但如果它真的是一对多,你可以让你的模型像这样:

 public class Course
    {
        public int CourseId { get; set; }
        public string CourseNumber { get; set; }
        public string CourseName { get; set; }
        public decimal Credits { get; set; }
        public bool? PreReq { get; set; }
        public int DepartmentID { get; set; }

        public int? PreRequisiteForCourseId {get; set;}
        public virtual Course PreRequisiteForCourse {get; set;}
        [InverseProperty("PreRequisiteForCourse")]
        public virtual ICollection<Course> PreReq { get; set; }
    }

在这种情况下,每门课程只能是一门课程的先决条件。

【讨论】:

  • 很抱歉已经出差了。现在的请求是能够添加一门新课程,并且在此过程中能够定义一个或多个先决条件课程,例如我正在创建课程 501,我想定义该课程 400,并且可能是课程 405 是先决条件对于该课程,因此当学生注册附加到课程 501 的课程时,系统将在注册前检查他是否参加了其他课程。
猜你喜欢
  • 2014-03-28
  • 2023-03-20
  • 2014-09-11
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2017-02-17
相关资源
最近更新 更多