EF Core 上下文不包含添加实体的更改
EF Core Context does not contain changes for added entities
我有 .NET Core 3.1 Web API 和 EF Core 3.1。
我有带 Scoped 生命周期的 DbContext。
我有两个服务,我在构造函数中注入了 DbContext。
当我更新 Service1 中的现有实体(而不是调用 SaveChanges,只是 context.Update)时,我可以在 Service2 的上下文中看到一个更新的实体(当然是在一个请求期间)。
但是
当我在 Service1 中创建一个新实体(而不是调用 SaveChanges,只是 context.Add)时,该实体在 Service2 的上下文中不存在。
为什么会发生这种情况,是否可以修复它以在我注入上下文的任何服务中添加实体?
当您发出数据库查询时 (未指定 AsNoTracking
选项),上下文将丢弃它已经跟踪的任何实体的加载数据,并且return 现有实例。这就是为什么您的服务会看到尚未保存的实体的更新详细信息。
但是,由于数据库查询不会 return 已添加但尚未保存的实体的任何详细信息,因此它们不会包含在查询结果中。
如果您想查看待处理的更改,则需要改为查询 the DbSet<TEntity>.Local
collection。
我有 .NET Core 3.1 Web API 和 EF Core 3.1。 我有带 Scoped 生命周期的 DbContext。
我有两个服务,我在构造函数中注入了 DbContext。 当我更新 Service1 中的现有实体(而不是调用 SaveChanges,只是 context.Update)时,我可以在 Service2 的上下文中看到一个更新的实体(当然是在一个请求期间)。
但是
当我在 Service1 中创建一个新实体(而不是调用 SaveChanges,只是 context.Add)时,该实体在 Service2 的上下文中不存在。
为什么会发生这种情况,是否可以修复它以在我注入上下文的任何服务中添加实体?
当您发出数据库查询时 (未指定 AsNoTracking
选项),上下文将丢弃它已经跟踪的任何实体的加载数据,并且return 现有实例。这就是为什么您的服务会看到尚未保存的实体的更新详细信息。
但是,由于数据库查询不会 return 已添加但尚未保存的实体的任何详细信息,因此它们不会包含在查询结果中。
如果您想查看待处理的更改,则需要改为查询 the DbSet<TEntity>.Local
collection。