[英]Navigation property returns null after inserting
我已將我的應用程序從EF4遷移到EF5。 我使用以下代碼與先前版本獲取新添加項目的相關實體。
Student s = new Student();
s.Name = _name;
s.ClassID = _cID;
db.Students.Add(s);
db.SaveChanges();
ClassRoom c = s.ClassRoom;
所以我曾經把特定的類實體帶到c
。 但是現在s.ClassRoom
返回null。
如何為學生獲得ClassRoom
實體? 我必須使用db.ClassRooms.FirstOrDefault(....)
嗎?
問題是您尚未加載導航屬性。
您可以使用:
db.Students.Include("ClassRoom")
要么
using System.Data.Entity;
db.Students.Include(s=>s.ClassRoom)
急切地加載導航屬性
另一個選項是通過使用virtual標記導航屬性來啟用延遲加載。 我個人更喜歡前者(急切加載),因為它鼓勵更高性能的代碼。
另請查看我的導航屬性文章,我在開始時談論加載http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first
您的代碼應如下所示:
Student s = new Student();
s.Name = _name;
s.ClassID = _cID;
db.Students.Add(s);
db.SaveChanges();
//reload the entity from the DB with its associated nav property
s = db.Students.Include(s=>s.ClassRoom).Single(st=>st.StudentId == s.StudentId);
ClassRoom c = s.ClassRoom;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.