导入属性在插入后返回null

我已将我的应用程序从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;