【问题标题】:EF doesn't update related entities on SaveChangesEF 不会更新 SaveChanges 上的相关实体
【发布时间】:2013-11-14 17:17:12
【问题描述】:

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

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

为什么新实体没有正确刷新?

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

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

【问题讨论】:

标签: c# asp.net-mvc entity-framework dbcontext objectcontext


【解决方案1】:

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

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

User u = db.Users.Create();

我对@9​​87654321@ 中记录的导航属性和外键进行了一些试验。

【讨论】:

  • 对不起安德斯 - 刚刚对我的问题进行了一些编辑,这可能会改变你的答案。
  • 另外我使用的是 db-first,所以我不应该在自动生成的代码中添加 virtual 或其他任何内容。
  • 嗯,没错 - 我刚刚用解决实际问题的方法更新了我的答案 - 没有先看到它。
  • 对new 事情的出色、清晰的解释。我可以看到您的博客文章非常有帮助,但是如果有人知道可以帮助我从 ObjectContext 迁移到 DbContext 的博客文章,那将是巨大的。我有一个谷歌,但找不到任何全面的东西。
  • 这是否也意味着我不能再填充构造中的实体字段,例如User u = new User() { Name="Joe" }?
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多