Код: Выделить всё
internal class WsSaveChangesInterceptor ( IOptionsSnapshot config,
WsService wsService
)
: SaveChangesInterceptor
{
private static readonly ConditionalWeakTable _stateMap = [];
public override ValueTask SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default)
{
if (eventData.Context != null)
{
_stateMap.Remove(eventData.Context);
var changesToSend = ListDbChangesForTrackedTables(eventData);
if (changesToSend.Any())
_stateMap.Add(eventData.Context, changesToSend);
}
return base.SavingChangesAsync(eventData, result, cancellationToken);
}
public override int SavedChanges( SaveChangesCompletedEventData eventData,
int result
)
{
if (eventData.Context != null && _stateMap.TryGetValue(eventData.Context, out var changesToSend))
{
_ = wsService.NotifyOfTablesChangesAsync(changesToSend); // NOT AWAITED -> normal !
_stateMap.Remove(eventData.Context);
}
return base.SavedChanges(eventData, result);
}
public override void SaveChangesFailed(DbContextErrorEventData eventData)
{
ClearState(eventData);
base.SaveChangesFailed(eventData);
}
}
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/796 ... after-save
Мобильная версия