EF Core 上下文不包含添加实体的更改

Posted

技术标签:

【中文标题】EF Core 上下文不包含添加实体的更改【英文标题】:EF Core Context does not contain changes for added entities 【发布时间】:2021-11-19 17:23:19 【问题描述】:

我有 .NET Core 3.1 Web API 和 EF Core 3.1。 我有 Scoped 生命周期的 DbContext。

我有两个服务,我在构造函数中注入 DbContext。 当我更新 Service1 中的现有实体(而不是调用 SaveChanges,只是 context.Update)时,我可以在 Service2 的上下文中看到更新的实体(当然是在一个请求期间)。

但是

当我在 Service1 中创建一个新实体(而不是调用 SaveChanges,只是 context.Add)时,该实体在 Service2 的上下文中不存在。

为什么会发生这种情况,是否可以修复它以在我注入上下文的任何服务中添加实体?

【问题讨论】:

发布您的代码。如果两个 看到相同的 DbContext 实例,它们看到相同的实体。您没有看到更新实体,您在两个类中看到相同的实体。 【参考方案1】:

当您发出数据库查询时(未指定AsNoTracking 选项),上下文将丢弃它已经跟踪的任何实体的加载数据,并返回现有实例。这就是为什么您的服务会看到尚未保存的实体的更新详细信息。

但是,由于数据库查询不会返回已添加但尚未保存的实体的任何详细信息,因此它们不会包含在查询结果中。

如果您想查看待处理的更改,则需要查询 the DbSet<TEntity>.Local collection。

Change Tracking in EF Core

【讨论】:

以上是关于EF Core 上下文不包含添加实体的更改的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 在对现有查询添加查询时附加所有实体 [重复]

为啥实体框架核心加载实体的关系而不添加包含

[小技巧]EF Core中如何获取上下文中操作过的实体

EF6 无法将分离的实体附加到上下文

实体框架始终包含上下文中的数据,即使我不要求它

为什么使用T4修改EF中的实体?