Entity framework core 保存更改时缓存删除

Entity framework core 保存更改时缓存删除,entity-framework-core,entity-framework-core-5,Entity Framework Core,Entity Framework Core 5,一旦将保存提交到数据库,我希望收到已更新对象的通知 这是为了触发一些缓存丢弃,这样偶尔不必要的通知就可以了 明确的解决办法可以是: await context.SaveChangesAsync(); someNotifier.EntityHasChanged(entity); 但在每次调用saveChanges后,都必须添加/记住这些内容 我认为挂接DBContext保存事件/方法可能是一种通用的方法。 我们有一个event context.SavedChanges,但它无法访问已更改的实体,

一旦将保存提交到数据库,我希望收到已更新对象的通知

这是为了触发一些缓存丢弃,这样偶尔不必要的通知就可以了

明确的解决办法可以是:

await context.SaveChangesAsync();
someNotifier.EntityHasChanged(entity);
但在每次调用saveChanges后,都必须添加/记住这些内容

我认为挂接DBContext保存事件/方法可能是一种通用的方法。 我们有一个event context.SavedChanges,但它无法访问已更改的实体,因为它们都已被接受

我们有一个SavingChanges活动,可以访问,但我们不知道保存是否成功

有一个ChangeTracker.StateChanged,但是可能有很多原因导致状态发生更改,并且这确实会在节省时间时发生

所以这似乎并不完美

我可以覆盖SaveChangesSync:

  public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
     {
          List<object> modifiedEntities = new List<object>();
          ChangeTracker.DetectChanges();

          foreach (var entry in ChangeTracker.Entries())
          {
             modifiedEntities.Add(entry.Entity);
          }

          var result = base.SaveChangesAsync(cancellationToken);

          someNotifier.EntitiesHaveChanged(modifiedEntities)
          return result;
}
public override Task savechangessync(CancellationToken CancellationToken=default)
{
List modifiedEntities=新列表();
ChangeTracker.DetectChanges();
foreach(ChangeTracker.Entries()中的var条目)
{
modifiedEntities.Add(entry.Entity);
}
var结果=base.saveChangesSync(cancellationToken);
someNotifier.Entities已更改(modifiedEntities)
返回结果;
}
这可能会起作用,尽管:

  • 事务可能尚未提交,因此不同的DBContext可能会使用旧数据刷新缓存 (如果使用相同的上下文,应该可以吗?),但是此时回滚事务可能会导致缓存未提交状态
虽然事务使用率很低(并且正在缓慢删除),但回滚的可能性很小。 是否有任何用于实现这一点的模式(有或没有事务)