我正在通过延迟加载将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,我怀疑是否再次调用数据库也可以。

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

为什么新实体无法正确刷新?

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

编辑-我应该补充一点,我正在使用数据库优先代码生成

最佳答案

您必须将LineManager属性virtual设置为可被延迟加载代理覆盖。 (这已经归功于代码生成)

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

User u = db.Users.Create();


我对导航属性和blog post中记录的外键做了一些试验。

10-01 21:56