温柔一点,如果我第一次没有正确理解术语,这是我的第一篇文章,非常抱歉。
在Entity Framework
我需要编写一些审计代码。
我有一个上下文类,它继承DbContext
了我的数据库。
SetInitializer
和我DbSets
的每个实体。
我还在进行审核的地方覆盖了 SaveChanges。
有 3 个审计级别,None,Basic和AllProperties,每个实体都有一个不同的属性分配给它,在这种情况下,我正在尝试进行 AllProperties 审计。
这适用于EntityState.Modified
我GetModifiedProperties
在 foreach 中为每个修改的属性编写新记录的地方
但是我在为 做同样的事情时遇到了麻烦EntityState.Added
,似乎没有一个等价物GetNewProperties
可以循环通过。
case AuditType.AllProperties:
{
if (entry.State == EntityState.Modified)
{
foreach (var propertyName in entry.GetModifiedProperties()
.Where(propertyName => propertyName != "Id" && propertyName != "RowVersion"))
{
var original = entry.OriginalValues;
var oldValue = original.GetValue(original.GetOrdinal(propertyName)).ToString();
var current = entry.CurrentValues;
var newValue = current.GetValue(current.GetOrdinal(propertyName)).ToString();
//if (oldValue != newValue) // probably not necessary
//{
AuditTrails.Add(new AuditTrail
{
DomainId = domainId,
Controller = "",
Action = "",
EntityType = entry.Entity.GetType().Name,
EntityId = entityId,
Property = propertyName,
Before = oldValue,
After = newValue
});
}
}
else
{
AuditTrails.Add(new AuditTrail
{
DomainId = domainId,
Controller = "",
Action = "",
EntityType = entry.Entity.GetType().Name,
EntityId = entityId,
EntityValue = entry.Entity.ToString(),
Property = "",
Before = "",
After = entry.State.ToString()
});
}
任何人都可以帮忙吗?