插入后导航属性返回 null

2023-11-22

我已将应用程序从 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返回空值。

我如何获得ClassRoom学生的实体?我必须使用db.ClassRooms.FirstOrDefault(....)?


问题是您尚未加载导航属性。

您可以使用:

db.Students.Include("ClassRoom")

or

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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插入后导航属性返回 null 的相关文章

随机推荐