LANCommander/LANCommander.Launcher.Data/Interceptors/AuditingInterceptor.cs

41 lines
1.4 KiB
C#
Raw Permalink Normal View History

using System.Security.Claims;
using LANCommander.Launcher.Data.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
namespace LANCommander.Launcher.Data.Interceptors
{
public sealed class AuditingInterceptor : SaveChangesInterceptor
{
public override async ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData, InterceptionResult<int> result, CancellationToken cancellationToken = default)
{
var context = eventData.Context;
if (context is null)
return await base.SavingChangesAsync(eventData, result, cancellationToken);
2025-01-25 15:21:56 -06:00
try
{
context.ChangeTracker.DetectChanges();
2025-01-25 15:21:56 -06:00
var entries = context.ChangeTracker.Entries<BaseModel>();
2025-01-25 15:21:56 -06:00
foreach (var entry in entries)
{
if (entry.State == EntityState.Added)
entry.Entity.CreatedOn = DateTime.UtcNow;
2025-01-25 15:21:56 -06:00
if (entry.State == EntityState.Added || entry.State == EntityState.Modified)
entry.Entity.UpdatedOn = DateTime.UtcNow;
}
}
catch (Exception ex)
{
}
return await base.SavingChangesAsync(eventData, result, cancellationToken);
}
}
}