添加项目文件。
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user