我有。net Core 3.1 Web API与EF Core 3.1。我有DbContext与作用域生命周期。
我有两个服务,我在构造函数中注入DbContext。当我更新Service1中的现有实体(而不是调用SaveChanges,只是context. update)时,我可以在Service2的上下文中看到一个更新的实体(当然是在一个请求期间)。
,
当我在Service1中创建一个新实体时(而不是调用SaveChanges,只是context. add),那么这个实体在Service2的上下文中是缺席的。
为什么会发生这种情况,是否有可能在我注入上下文的任何服务中添加实体?
当您发出数据库查询(不指定AsNoTracking
选项)时,上下文将丢弃它已经跟踪的任何实体的加载数据,并返回现有实例。这就是为什么您的服务会看到尚未保存的实体的更新详细信息。
但是,由于数据库查询不会返回已添加但尚未保存的实体的任何详细信息,因此它们不会包含在查询结果中。
如果要查看挂起的更改,则需要查询DbSet<TEntity>.Local
集合。
EF Core的变更跟踪