So erhalten Sie eine ID von einer Entität für Auditlog in Entity Framework 6C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So erhalten Sie eine ID von einer Entität für Auditlog in Entity Framework 6

Post by Anonymous »

Ich weiß, dass es mehrere ähnliche Beiträge gibt, aber ich kann keinen mit einer Lösung für dieses Problem finden.

Ich möchte eine (Art) AudioLog hinzufügen, wenn ich Entitäten (vorläufiges Löschen) in Entity Framework 6 hinzufüge, ändere oder lösche. Ich habe SaveChanges überschrieben und da ich nur Protokolleinträge für hinzugefügte, geänderte oder gelöschte EntityStates hinzufügen möchte, rufe ich die Liste ab, bevor ich SaveChanges als erstes aufrufe Zeit. Das Problem besteht darin, dass ich den EntityState der Entitäten überprüfen muss, da ich protokollieren muss, welche Operation ausgeführt wurde. Aber nachdem SaveChanges aufgerufen wurde, ist der EntityState für alle Einträge Unchanged.

Code: Select all

public override int SaveChanges()
{
using (var scope = new TransactionScope())
{
var modifiedEntries = ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added || e.State == EntityState.Deleted || e.State == EntityState.Modified)
.ToList();

int changes = base.SaveChanges();
foreach (var entry in modifiedEntries)
{
ApplyAuditLog(entry);
}

base.SaveChanges();
scope.Complete();
return changes;
}
}

private void ApplyAuditLog(DbEntityEntry entry)
{
ILog entity = entry.Entity as ILog;

if (entity != null)
{
LogOperation operation;
switch (entry.State)
{
case EntityState.Added:
operation = LogOperation.CreateEntity;
break;
case EntityState.Deleted:
operation = LogOperation.DeleteEntity;
break;
case EntityState.Modified:
operation = LogOperation.UpdateEntity;
break;
default:
throw new ArgumentOutOfRangeException();
}

AuditLog log = new AuditLog
{
Created = DateTime.Now,
Entity = entry.Entity.GetType().Name,
EntityId = entity.Id,
Operation = operation,
};

AuditLog.Add(log);
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post