插入后,Navigation属性返回null

Lib*_* TK 5 .net c# entity-framework

我已将我的应用程序从EF4迁移到EF5.我使用以下代码与先前版本获取新添加项目的相关实体.

Student s = new Student();
s.Name = _name;
s.ClassID = _cID;

db.Students.Add(s);
db.SaveChanges();

ClassRoom c = s.ClassRoom;
Run Code Online (Sandbox Code Playgroud)

所以我以前得到了特定的类实体c.但现在s.ClassRoom返回null.

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

Not*_*ple 9

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

您可以使用:

db.Students.Include("ClassRoom")
Run Code Online (Sandbox Code Playgroud)

要么

using System.Data.Entity;
db.Students.Include(s=>s.ClassRoom)
Run Code Online (Sandbox Code Playgroud)

急切地加载导航属性

另一个选项是通过使用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;
Run Code Online (Sandbox Code Playgroud)