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 上下文不包含添加实体的更改的主要内容,如果未能解决你的问题,请参考以下文章