using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using EonaCat.gRPC.Core.Entities; namespace EonaCat.gRPC.Repository.DatabaseContext; public class AppDbContext : DbContext { private readonly ILoggerFactory _loggerFactory = new LoggerFactory(); public AppDbContext(DbContextOptions context) : base(context) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseLoggerFactory(_loggerFactory); optionsBuilder.UseSqlServer().LogTo(Console.WriteLine).EnableDetailedErrors(); base.OnConfiguring(optionsBuilder); } public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken()) { UpdateEntryLog(); return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { UpdateEntryLog(); return base.SaveChangesAsync(cancellationToken); } private void UpdateEntryLog() { foreach (var entry in ChangeTracker.Entries()) { switch (entry.State) { case EntityState.Added: entry.Entity.CreatedAt = DateTime.UtcNow; entry.Entity.UpdatedAt = DateTime.UtcNow; break; case EntityState.Modified: entry.Entity.UpdatedAt = DateTime.UtcNow; break; case EntityState.Deleted: entry.Entity.UpdatedAt = DateTime.UtcNow; break; } } } public DbSet Users { get; set; } = null!; }