1

我正在使用延迟加载将我的 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即使正确保存了新实体也是 null,我怀疑如果我再次调用数据库会很好。

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

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

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

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

4

1 回答 1

9

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

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

User u = db.Users.Create();

我对在博客文章中记录的导航属性和外键进行了一些试验。

于 2013-11-14T17:19:31.500 回答