我在這裏有一個非常奇怪的問題,我沒有任何線索爲什麼。SQL查詢顯示良好的數據庫值,但LINQ to Entity框架從零開始帶來空值
我應該在C#中製作一個小的localdb控制檯應用程序。目標是在數據庫中輸入人員(實際上是教師),並提供一定數量的信息。
我有幾個類,但其中2個是重要的:認證和表示法。 認證是教授們的認證。
這些類的代碼是這樣的:
class Certification
{
public int CertificationID { get; set; }
public virtual Teacher Teacher { get; set; }
public virtual Course Course { get; set; }
public string CertificationName { get; set; }
public virtual Notation Notation { get; set; }
}
class Notation
{
public int NotationID {get;set;}
public string Note {get;set;}
}
沒有什麼太危險了。通過遷移我做我的數據庫,他們看起來像他們應該:
認證:
CertificationID (PK)
CertificationName
Course_CourseID (FK to another class, course)
Notation_NotationID (FK to notations)
Teacher_TeacherID (FK to the teachers)
符號:
NotationID (PK)
Note
我的程序允許我補充教師,有我需要的所有信息,例如,他們的認證。在這裏,我做了一個假老師,帶着一個虛擬認證。 如果我叫SELECT * FROM認證,我得到正是我應該得到的,一行是這樣的:
CertificationID = 6
CertificationName = placeholder
Course_CourseID = 13
Notation_NotationID = 12
Teacher_TeacherID = 5
一切都在這個正確的。 CourseID鏈接到數據庫中的實際課程,實際註釋中的NotationID以及教師與實際的教師。一切安好!現在
,我只是想表明我們的老師的證書:
var certifs = from c in db.Certifications where c.Teacher.TeacherID == item.TeacherID select c;
foreach(var v in certifs)
{
var course = (from c in db.Courses where c.CourseID == v.Course.CourseID select c).First();
var note = (from n in db.Notations where n.NotationID == v.Notation.NotationID select n.NotationID).First();
Console.WriteLine("Name: " + v.CertificationName + ", related to the " + course.CourseName + " course, with a note of " + note);
Console.WriteLine("");
}
而且這是行不通的。當我的foreach循環開始時,循環中的第一項沒有任何對符號的引用。其他一切都很好:課程和教師的外鍵在這裏,並且是有效的,但對於符號,我只能得到一個空值。所以,我的認證項目看上去更像是:
CertificationID = 6
CertificationName = placeholder
Course_CourseID = 13
Notation_NotationID = null
Teacher_TeacherID = 5
基本上,如果我做一個SQL查詢,我在數據庫行是完全沒有問題的,但稱這是通過實體框架(和LINQ)返回的空值符號。 (這調用VAR筆記等時拋出一個異常....
有誰對這個想法?我真的被困在此。
對不起,如果我的英語不夠好如果你們需要更多的信息,只問
由JC Anwsered:。
延遲加載心不是正常預先加載解決了這個問題
我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –