如何使用插件中的Entity Framework进行审计

时间:2017-02-01 06:23:39

标签: c# entity-framework-6 audit

我想跟踪插件架构的变化。这是我在插件DbContext中的代码。如果我的整个应用程序发生任何变化,我想调用此方法。

public override int SaveChanges()
{
    this.Configuration.AutoDetectChangesEnabled = false;
    this.Configuration.LazyLoadingEnabled = false;
    this.Configuration.ProxyCreationEnabled = false;

    var modifiedEntities = ChangeTracker.Entries()
                .Where(e => e.State == EntityState.Added
                                       || e.State == EntityState.Modified
                                       || e.State == EntityState.Deleted).ToList();

    foreach (var change in modifiedEntities)
    {
        var entityName = change.Entity.GetType().Name;
        var primaryKey = GetPrimaryKeyValue(change);

        List<Nop.Plugin.XcellenceIt.ChangeTracker.Domain.ChangeTracker> changeTrackerList = new List<Nop.Plugin.XcellenceIt.ChangeTracker.Domain.ChangeTracker>();

        foreach (var prop in change.OriginalValues.PropertyNames)
        {
            var originalValue = change.OriginalValues[prop].ToString();
            var currentValue = change.CurrentValues[prop].ToString();

            if (originalValue != currentValue)
            {
                Nop.Plugin.XcellenceIt.ChangeTracker.Domain.ChangeTracker changeTracker = new Nop.Plugin.XcellenceIt.ChangeTracker.Domain.ChangeTracker()
                        {
                            EntityName = entityName,
                            PrimaryKeyValue = primaryKey.ToString(),
                            FieldName = prop,
                            OldValue = originalValue,
                            NewValue = currentValue,
                            EntityState = Convert.ToString(change.State),
                            DateChanged = DateTime.UtcNow
                        };

                changeTrackerList.Add(changeTracker);
            }
        }
    }

    this.Configuration.AutoDetectChangesEnabled = true;
    return base.SaveChanges();
} 

我无法弄清楚这个解决方案。请帮帮我。

0 个答案:

没有答案