EF不会在SaveChanges上更新相关实体

rwa*_*ter 1 c# asp.net-mvc entity-framework objectcontext dbcontext

我正在使用延迟加载将我的EF6 MVC项目从ObjectContext迁移到DbContext.

使用ObjectContext,我可以执行以下操作:

// Create a new user:
 User u = new User();
 u.LineManagerID = 42;   // Set foreign key

 db.Users.Add(u);
 db.SaveChanges();

// get property of related entity as set above by foreign key 
 User lm = u.LineManager;
Run Code Online (Sandbox Code Playgroud)

使用DbContext,u.LineManager即使新实体被正确保存也是null,我怀疑如果我再次调用数据库就可以了.

延迟加载和动态代理都已启用.

为什么新实体不能正确刷新?

请帮忙!我可以看到这种迁移比我想象的要困难得多......!

编辑 - 我应该补充说我正在使用db-first代码生成

And*_*bel 9

您必须使该LineManager属性virtual可以被延迟加载代理覆盖.(这已经归功于代码生成)

当您直接创建对象时,new遗憾的是只创建一个普通对象 - 而不是具有所有延迟加载功能的代理对象.要获得这些,您需要使用工厂方法来创建对象:

User u = db.Users.Create();
Run Code Online (Sandbox Code Playgroud)

我做了一些实验,我在博客文章中记录了导航属性和外键.