如何使用 tracker-enabled-dbcontext 定位另一个数据库

How do I target another database with tracker-enabled-dbcontext

我正在尝试从 documentaion and tracker-enabled-dbcontext git repository 中实现 tracker-enabled-dbcontext 包 但我无法更改保存更改以针对不同的数据库。我修改了我的 SaveChanges

public class MyDBContext : DbContext, IUnitOfWork {}
public class MacsAuditDbContext : TrackerEnabledDbContext.TrackerContext {}

在 MyDBContext 中

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();
        }

在我的初创公司中 class

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            AuthConfig.Register(app);
            GlobalConfiguration.Configuration
    .UseSqlServerStorage("MacsAuditDbContext");
                }
    }

但我仍然无法将审计日志保存到目标(辅助)数据库中。我的域完整地保存了我的主数据库,但没有保存审计日志。 我想将 MyDBContext 传递给 MacsAuditDbContext 吗?或者我做错了什么?请帮助我。

您可以尝试利用 OnAuditLogGenerated 事件。沿着这条线:

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);
    }
}