我正在尝试对 Entity Framework Core 中的选择类实施审计跟踪(跟踪更改的内容、时间和更改者)。
我当前的实现依赖于覆盖 OnSaveChangesAsync:
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
{
var currentUserFullName = _userService.CurrentUserFullName!;
foreach (var entry in ChangeTracker.Entries<AuditableEntity>())
{
switch (entry.State)
{
case EntityState.Added:
entry.Entity.CreatedBy = currentUserFullName;
entry.Entity.Created = _dateTime.Now;
break;
case EntityState.Modified:
var originalValues = new Dictionary<string, object?>();
var currentValues = new Dictionary<string, object?>();
foreach (var prop in entry.Properties.Where(p => p.IsModified))
{
var name = prop.Metadata.Name;
originalValues.Add(name, prop.OriginalValue);
currentValues.Add(name, prop.CurrentValue);
}
entry.Entity.LastModifiedBy = currentUserFullName;
entry.Entity.LastModified = _dateTime.Now;
entry.Entity.LogEntries.Add(
new EntityEvent(
_dateTime.Now, …Run Code Online (Sandbox Code Playgroud)