Files
EonaCat.gRPC/EonaCat.gRPC.Repository/DatabaseContext/AppDbContext.cs
T
2026-06-09 22:27:38 +02:00

56 lines
1.8 KiB
C#

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<AppDbContext> context) : base(context)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLoggerFactory(_loggerFactory);
optionsBuilder.UseSqlServer().LogTo(Console.WriteLine).EnableDetailedErrors();
base.OnConfiguring(optionsBuilder);
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken())
{
UpdateEntryLog();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
UpdateEntryLog();
return base.SaveChangesAsync(cancellationToken);
}
private void UpdateEntryLog()
{
foreach (var entry in ChangeTracker.Entries<BaseEntity>())
{
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<UserEntity> Users { get; set; } = null!;
}