我正在使用延迟加载将我的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;
使用DbContext,即使正确保存新实体,u.LineManager
也为空,我怀疑如果我再次调用数据库就可以了。
延迟加载和动态代理都已启用。
为什么新实体不能正确刷新?
请帮忙!我可以看到这种迁移比我想象的要困难得多......!
编辑 - 我应该补充说我正在使用db-first代码生成
答案 0 :(得分:9)
您必须使延迟加载代理可以覆盖LineManager
属性virtual
。 (这已经归功于代码生成)
使用new
直接创建对象时,遗憾的是只创建一个普通对象 - 而不是具有所有延迟加载功能的代理对象。要获得这些,您需要使用工厂方法来创建对象:
User u = db.Users.Create();
我做了一些实验,我在blog post中记录了导航属性和外键。