导航属性在插入后返回null

本文关键字:返回 null 插入 属性 导航 | 更新日期: 2023-09-27 18:30:11

我已经将我的应用程序从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(....)吗?

导航属性在插入后返回null

问题是您还没有加载导航属性。

您可以使用:

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;