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可能会使用旧数据刷新缓存 (如果使用相同的上下文,应该可以吗?),但是此时回滚事务可能会导致缓存未提交状态