Files
IM_NEW/Infrastructure/Efcore/BaseDbContext.cs
T
2026-05-09 17:06:30 +08:00

38 lines
1.0 KiB
C#

using IM.DomainCommons;
using MediatR;
using Microsoft.EntityFrameworkCore;
namespace IM.Infrastructure.Efcore
{
public class BaseDbContext : DbContext
{
private IMediator? mediator;
public BaseDbContext(DbContextOptions options, IMediator mediator)
: base(options)
{
this.mediator = mediator;
}
public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
{
if (mediator != null)
{
await mediator.DispatchDomainEventsAsync(this);
}
var softDeletedEntities = ChangeTracker
.Entries<ISoftDelete>()
.Where(x => x.State == EntityState.Modified && x.Entity.IsDeleted)
.ToList();
var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
softDeletedEntities.ForEach(e => e.State = EntityState.Detached);
return result;
}
}
}