Un Update interceptor di Entity framework in .NET 8 permette di intercettare i salvataggi (dbContext.SaveChangesAsync) ed eseguire delle operazioni, come ad esempio impostare le date di creazione e/o modifica.

Per usarlo va creata una classe che eredita da SaveChangesInterceptor e implementa il metodo SavingChangesAsync

C#: SaveChangesInterceptor

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using ReactApp1.Server.DTO.Entities;

namespace ReactApp1.Server.Repositories.MsSqlEf.Interceptors;

public class DatabaseUpdateInterceptor : SaveChangesInterceptor
{
    public override ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData, InterceptionResult<int> result, CancellationToken cancellationToken = default)
    {
        // Do something before saving changes
        if (eventData.Context is not null)
        {
            var dbContext = eventData.Context;
            foreach (var entry in dbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Added || e.State == EntityState.Modified))
            {
                // mi assicuro che le date di creazione e modifica siano sempre aggiornate
                if (entry.Entity is TodoEntity todo)
                {
                    todo.ModifyDate = DateTime.UtcNow;
                    if (entry.State == EntityState.Added)
                    {
                        todo.CreationDate = todo.ModifyDate;
                    }
                }
            }
        }
        return base.SavingChangesAsync(eventData, result, cancellationToken);
    }
}
va poi aggiunto in fase di registrazione del servizio AddDbContext tramite AddInterceptors

C#: AddDbContext

builder.Services.AddDbContext<DatabaseContext>(options =>
        {
            options.UseSqlServer(connectionString);
            options.AddInterceptors(new DatabaseUpdateInterceptor());
        });
Tags:
.NET69 Entity framework5 C#240 Database76
Potrebbe interessarti anche: