Estoy tratando de implementar el paquete tracker-enabled-dbcontext del repositorio de git documentaion y tracker-enabled-dbcontext Pero no puedo cambiar los cambios guardados para apuntar a una base de datos diferente. He modificado mis SaveChanges
public class MyDBContext : DbContext, IUnitOfWork {} public class MacsAuditDbContext : TrackerEnabledDbContext.TrackerContext {}en MiContextoDB
public override int SaveChanges() { DateTime nowAuditDate = DateTime.Now; IEnumerable<System.Data.Entity.Infrastructure.DbEntityEntry<DomainEntity>> changeSet = ChangeTracker.Entries<DomainEntity>(); if (changeSet != null) { foreach (System.Data.Entity.Infrastructure.DbEntityEntry<DomainEntity> entry in changeSet) { switch (entry.State) { case EntityState.Added: entry.Entity.Created = nowAuditDate; entry.Entity.Modified = nowAuditDate; break; case EntityState.Modified: entry.Entity.Modified = nowAuditDate; break; } } } using (MacsAuditDbContext db = new MacsAuditDbContext()) { db.SaveChanges(); } return base.SaveChanges(); }en mi clase de inicio
public class Startup { public void Configuration(IAppBuilder app) { AuthConfig.Register(app); GlobalConfiguration.Configuration .UseSqlServerStorage("MacsAuditDbContext"); } }Pero todavía no puedo guardar los registros de auditoría en la base de datos de destino (secundaria). mi dominio se completa guardando mi base de datos principal pero no los registros de auditoría. ¿Quiero pasar MyDBContext a MacsAuditDbContext? O estoy haciendo algo mal? por favor, ayúdame.
Puede intentar aprovechar el evento OnAuditLogGenerated . Algo así:
public sealed class MyDBContext : TrackerContext { public MyDBContext () { OnAuditLogGenerated += SaveToAnotherDb; } private void SaveToAnotherDb(object? sender, AuditLogGeneratedEventArgs args) { var auditLog = args.Log; using (MacsAuditDbContext db = new MacsAuditDbContext()) { db.AuditLog.Add(auditLog); db.SaveChanges(); } //skips saving to local database args.SkipSavingLog = true; } protected override void Dispose(bool disposing) { OnAuditLogGenerated -= SaveToAnotherDb; base.Dispose(disposing); } }