我是一位新的.NET開發人員。我有2個實體類,這樣實體框架查找結果vs LINQ結果
public class Student
{
public int userId { get; set; }
public string username { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
public string email { get; set; }
public Course course { get; set; }
}
public class Course
{
[Key]
public int courseId { get; set; }
public String courseName { get; set; }
}
我使用DB語境對象像這樣
using (MyDbContext db = new MyDbContext())
當我訪問使用
Student stdent = db.students.Find(1);
原始類型的成員變量的Student對象(int,string)包含值,但課程變量類型(Course)返回null。
然而,當我使用
var result = from student in db.students where student.userId == 1 select student;
結果包含值,所有成員變量(整個課程的對象是目前這裏)
這是預期的行爲還是我丟失或忽視的東西?
我甚至在我的數據庫上下文添加此構造函數來禁用延遲加載,但並沒有幫助
public MyDbContext() : base()
{
this.Configuration.LazyLoadingEnabled = false;
}
在第一種情況下,即使我將懶加載設置爲false(正如我在問題中所述)並嘗試訪問課程,它仍然會給我空值。任何想法爲什麼是這樣。 – user1429007 2013-03-01 15:25:49
是的,它永遠不會延遲加載,因爲該屬性不是虛擬的。不考慮上下文的延遲加載設置。它僅由_eager loading_加載。也就是說,通過Include或通過在像Students.Select(s => s.Course)這樣的linq查詢中尋址,或通過Load方法。 – 2013-03-01 15:31:58
我認爲你的一部分混亂是「lazy = false」(在上下文級別)的相反並不意味着「eager = true」。使用「lazy = true」時,如果可能的話發生延遲加載(即使用'virtual'屬性)。除非我上面提到的三個選項明確要求,否則「lazy = false」_no_加載將會發生。 – 2013-03-01 15:43:42