LexWells.Infrastructure/LexWells.Infrastructure.Ent.../UpdateAuditableEntitiesInte...

33 lines
1.1 KiB
C#

using LexWells.Infrastructure.EntityFramework.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
namespace LexWells.Infrastructure.EntityFramework;
public class UpdateAuditableEntitiesInterceptor : SaveChangesInterceptor
{
public override ValueTask<InterceptionResult<int>> SavingChangesAsync(
DbContextEventData eventData,
InterceptionResult<int> result,
CancellationToken cancellationToken = default)
{
var context = eventData.Context;
if (context == null)
{
return base.SavingChangesAsync(eventData, result, cancellationToken);
}
// Find all entities that are being modified and inherit from BaseEntity
var entries = context.ChangeTracker
.Entries<BaseEntity>()
.Where(e => e.State == EntityState.Modified);
foreach (var entry in entries)
{
entry.Entity.UpdatedAt = DateTime.UtcNow;
}
return base.SavingChangesAsync(eventData, result, cancellationToken);
}
}