我已经将应用程序从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)
急于加载nav属性
另一个选项是通过将导航属性标记为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;