-
Notifications
You must be signed in to change notification settings - Fork 6
Closed
Description
public override Task SaveChangesAsync(CancellationToken cancellationToken = default)
{
SetAuditFields();
return base.SaveChangesAsync(cancellationToken);
}
private void SetAuditFields()
{
var entries = ChangeTracker.Entries()
.Where(e => IsDomainEntity(e.Entity) &&
(e.State == EntityState.Modified || e.State == EntityState.Added || e.State == EntityState.Deleted));
foreach (var entry in entries)
{
dynamic entity = entry.Entity;
if (entry.State == EntityState.Added)
{
entity.SetCreatedOn(DateTime.UtcNow);
entity.SetModifiedOn(null);
entity.SetDeletedOn(null);
}
else if (entry.State == EntityState.Modified)
{
entity.SetModifiedOn(DateTime.UtcNow);
entity.SetDeletedOn(null);
}
else if (entry.State == EntityState.Deleted)
{
entity.SetDeletedOn(DateTime.UtcNow);
entry.State = EntityState.Modified;
}
}
}
private static bool IsDomainEntity(object entity)
{
var type = entity.GetType();
while (type != null)
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(DomainEntity<>))
return true;
type = type.BaseType;
}
return false;
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels