实施审计跟踪c#

时间:2017-01-11 14:38:15

标签: c# .net audit-trail

我为服务器中的每个操作实现了一个审核日志(添加,修改和删除)。问题出现在修改过的,因为我审核了每个被修改的属性,但是我不想审计一些属性。例如:时间戳或其他。 这就是我做的,并且工作正常: 1)我在DBContext中创建了另一个SaveChanges()方法 2)

if (dbEntity.State == EntityState.Modified)
            {
                foreach (string propertyName in dbEntity.OriginalValues.PropertyNames)
                {
                    if (!Equals(dbEntity.OriginalValues.GetValue<object>(propertyName), dbEntity.CurrentValues.GetValue<object>(propertyName)))
                    {
                        var log = new AuditLogDetailEntity()
                        {
                            Timestamp = timestamp,
                            Type = "M", // Modified
                            EntityName = tableName1,
                            PrimaryKeyValue = Convert.ToInt32(dbEntity.CurrentValues.GetValue<object>(primaryKeyName)),  
                            PropertyName = propertyName,    
                            OldValue = dbEntity.OriginalValues.GetValue<object>(propertyName) == null ? null : dbEntity.OriginalValues.GetValue<object>(propertyName).ToString(),
                            NewValue = dbEntity.CurrentValues.GetValue<object>(propertyName) == null ? null : dbEntity.CurrentValues.GetValue<object>(propertyName).ToString()
                        };
                        changesCollection.Add(log);
                    }
                }
            }`

这是一个提取代码,而不是所有功能。 我可以在里面进行验证,询问我不想审核的字段,但是,有没有更彻底的方法呢?也许在类中添加一些数据注释或其他东西.. 感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用[System.ComponentModel.DataAnnotations.Schema.NotMapped]属性。

答案 1 :(得分:0)

您可以创建自定义属性

foreach (string propertyName in dbEntity.OriginalValues.PropertyNames)
{
    if(!dbEntity.Entity.GetType().GetCustomAttributes(typeof(UnMappedAttribute), true).Any())
    {
         continue;
    }

    if (!Equals(dbEntity.OriginalValues.GetValue<object>(propertyName), dbEntity.CurrentValues.GetValue<object>(propertyName)))
    {
        //.....
    }
}

然后检查每个属性是否有它

>>> a = raw_input("What is your favourite colour?") 
What is your favourite colour?5
>>> 
>>> b = ['c{}'.format(i) for i in range(1, int(a)+1)]
>>> b
['c1', 'c2', 'c3', 'c4', 'c5']