有两个简单的关系表,“课程种类”和“课程”。
/// <summary> /// 课程种类 /// </summary> public class SubjectCategory { public int SubjectCategoryId { get; set; } /// <summary> /// 课程种类名称 /// </summary> [Required()] [StringLength(20)] public string CategoryName { get; set; } [Required()] public int Order { get; set; } public virtual DbSet<Subject> Subjects { get; set; } } /// <summary> /// 课程 /// </summary> public class Subject { public int SubjectId { get; set; } [Required()] [StringLength(20)] public string SubjectTitle { get; set; } public int SubjectCategoryId { get; set; } public virtual SubjectCategory SubjectCategory{ get; set; } [Required()] public int Order { get; set; } public virtual DbSet<TutorSubject> TutorSubject { get; set; } }
根据延迟加载的要求,已经标注好了virtual,生成数据库后表的外键关系也正确。可是在循环输出课程类别,当读取课程类别下的具体课程信息时,依然报“未将对象引用到实例”的错误。求大神指教。
@model IEnumerable<TutorJob.Model.SubjectCategory> @foreach (var item in Model) { <h3>@item.CategoryName</h3> @foreach (var subject in item.Subjects) { <input type="checkbox" value="@subject.SubjectId" /> <label for="@subject.SubjectId">@subject.SubjectTitle</label> } }
我又试着用Include()预先加载数据,直接报错了。
return DbSet.Include(m => m.Subjects).ToList();
指定的 Include 路径无效。EntityType“TutorJob.Model.SubjectCategory”未声明具有名称“Subjects”的导航属性。
各个地方都检查过了,无解啊!
用IList而不是DbSet