我正在嘗試在mvc官方網站上給出的mvc示例上的動手。 在這裏,我有3個模型學生,課程和註冊,在課程和註冊實體之間存在一對多關係,並在註冊和學生中建立多對一的關係。是導航屬性沒有得到延遲加載
的學生,課程和招生模式與導航屬性標記爲「虛擬」的,因爲我需要執行延遲綁定
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.My DB上下文類是如下
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);
}
這裏的問題是,當查找()方法被調用的控制器功能控制器的Student類模型中的導航屬性爲null。但DB中的數據對應於正在傳遞的id。簡而言之,導航屬性不返回數據(null)。
使用'.INCLUDE()'...參考[這裏] (http://stackoverflow.com/questions/26661771/what-does-include-do-in-linq)和[this](http://stackoverflow.com/questions/5648154/include-in-linq-to-實體 - 查詢)帖子。 –
這很好.....但我更喜歡延遲加載。請告訴我我在哪裏做錯了。 –
嘗試修改你的學生類,通過創建一個構造函數並添加以下內容。註冊= new Hashset(); –
uk2k05