using Microsoft.EntityFrameworkCore; using MTWorkHR.Core.Entities; using MTWorkHR.Core.Entities.Base; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MTWorkHR.Infrastructure.Data { public class HRDataContext : DbContext { public HRDataContext(DbContextOptions<HRDataContext> options) : base(options) { } public DbSet<Company> Companies { get; set; } public DbSet<Project> Projects { get; set; } // public DbSet<AttachmentType> AttachmentTypes { get; set; } public DbSet<UserTaskStatus> UserTaskStatuses { get; set; } public DbSet<UserTaskAttachment> UserTaskAttachments { get; set; } public DbSet<UserTask> UserTasks { get; set; } public DbSet<UserTaskHistory> UserTaskHistories { get; set; } //------------------------Logs------------------------ public DbSet<UserLog> UserLogs { get; set; } public DbSet<AuthLog> AuthLogs { get; set; } public DbSet<FileLog> FileLogs { get; set; } public DbSet<RoleLog> RoleLogs { get; set; } public DbSet<SettingLog> SettingLogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); SetGlobalFilters(modelBuilder); modelBuilder.ApplyConfigurationsFromAssembly(typeof(HRDataContext).Assembly); } public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default) { foreach (var entry in base.ChangeTracker.Entries<AuditEntity>().Where(q=> q.State == EntityState.Added || q.State == EntityState.Modified)) { entry.Entity.UpdateDate = DateTime.Now; if(entry.State == EntityState.Added) { entry.Entity.CreateDate = DateTime.Now; } } return base.SaveChangesAsync(cancellationToken); } private void SetGlobalFilters(ModelBuilder builder) { builder.SetQueryFilterOnAllEntities<ISoftDelete>(p => !p.IsDeleted); } } }