在 MVC 应用程序中记录/跟踪 CRUD 操作

Logging / Tracking CRUD operations in MVC application

我想将所有带有用户详细信息的CRUD操作保存到数据库中,然后根据以下方法监控这些信息。在我看来,第二种方法似乎更好,因此它可以从一个特定的 table 进行管理,也可以用于关键信息。那么,您能否通过提供一个适用示例来说明我如何使用框架或自定义代码(对于 MVC5 和 MsSQL Server 为 suitable)来最好地执行此操作?提前致谢。

方法 I: 通过将 "CreatedBy"、"CreatedOn" 等列添加到相关的 table 和 add/update每当添加或更新记录时,这些 table 上的信息("CreatedBy"、"CreatedOn" 等)。在这种情况下,只能从数据库中获取最新的更新信息,而无法获取之前的操作。

方法二: 通过在数据库中创建一个新的 table 并为每个包含 "CreatedBy"、"CreatedOn"、[=27 的 CRUD 操作添加一条新记录=]、"Action"、"Record Id"、"Upadte Value" 和其他必填字段。

我们在所有解决方案中都使用方法 1:

public partial class Database
{
    public Database(DbConnection connection)
        : base(connection, true)
    {
        CurrentUser = "SYSTEM";
    }

    public string CurrentUser
    {
        get;
        set;
    }

    public override int SaveChanges()
    {
        var changeSet = ChangeTracker.Entries();

        if (changeSet != null)
        {
            foreach (var change in changeSet.Where(x => x.State != EntityState.Unchanged))
            {
                if (change.State == EntityState.Added)
                {
                    SetCreatedFields(change);
                    SetLastChangedFields(change);
                }
                if (change.State == EntityState.Modified)
                {
                    SetLastChangedFields(change);
                }

            }
        }
        return base.SaveChanges();
    }

    private void SetLastChangedFields(DbEntityEntry change)
    {
        var entity = change.Entity as dynamic;
        entity.LastChangedBy= !string.IsNullOrEmpty(CurrentUser) ? CurrentUser : "System";
        entity.LastChanged = DateTime.Now;
    }

    private void SetCreatedFields(DbEntityEntry change)
    {
        var entity = change.Entity as dynamic;
        entity.CreatedBy = !string.IsNullOrEmpty(CurrentUser) ? CurrentUser : "System";
        entity.Created = DateTime.Now;
    }    
}

我意识到使用 dymanic 不是很好的做法,但它很简单而且有效。

最后我找到了 Bilal Fazlani 的完美文章“Adding Log Feature to Entity Framework”,这真的很容易集成到项目中。任何需要使用 Code First 方法在 Entity Framework 中 log/audit 的人都可以轻松地将其应用到自己的项目中。非常感谢您的帮助...