【发布时间】:2016-06-10 10:24:56
【问题描述】:
我正在尝试我在 Mvc 官方网站上给出的 mvc 示例。 这里我有 3 个模型 Student、Course 和 Enrollment,其中 Course 和 Enrollment 实体存在一对多关系,而 Enrollment 和学生存在多对一关系。
Student、Course 和 Enrollment 的模型如下,导航属性标记为“虚拟”,因为我需要执行惰性绑定
public class Student
{
public int StudentID { get;set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual IEnumerable<Enrollment> Enrollments { get; set; }
}
以同样的方式我有我的课程模型
我的注册模型
public class Enrollment
{
public int EnrollmentID { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
// public Grade? Grade { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
我在 EF 5 中使用代码优先技术。我的数据库上下文类如下
public class SchoolContext:DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
通过脚手架,我已经生成了所有视图。单击我的详细信息操作链接时,我有一个名为
的控制器函数 public ActionResult Details(int id = 0)
{
db.Configuration.LazyLoadingEnabled = true;
db.Configuration.ProxyCreationEnabled = true;
Student student = db.Students.Find(id);
// db.Entry(student).Reference(p => p.Enrollments).Load();
IEnumerable<Enrollment> s= student.Enrollments;
if (student == null)
{
return HttpNotFound();
}
return View(student);
}
这里的问题是在控制器中调用Find()方法时,Student Class模型中的导航属性为null。但是DB中存在与正在传递的id对应的数据。简而言之,导航属性是不返回数据(空)。
【问题讨论】:
-
那很好.....但是我更喜欢延迟加载。你能告诉我我哪里做错了吗。
-
尝试修改您的 Student 类,方法是创建一个构造函数并添加以下内容 .. Enrollments = new Hashset
();
标签: asp.net-mvc entity-framework asp.net-mvc-4