保持温和,如果我第一次没有得到这个术语,我的第一篇文章很抱歉。审计实体框架操作
在Entity Framework
我需要写一些审计代码。
我有一个上下文类继承DbContext
有我的数据库。 SetInitializer
和我的DbSets
为每个实体。
我也有一个覆盖SaveChanges我在做审计。
有3个级别的审计,无,基本和AllProperties每个实体都分配了一个不同的属性,在这种情况下,我试图做一个AllProperties审计。
本工程为EntityState.Modified
我在哪里在foreach使用GetModifiedProperties
写为每个属性修改
但是我无法做同样的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()
});
}
任何人都可以帮忙吗?
只是猜测对我的作品,但新的记录,他们都将是新的属性。那么是否有GetAllProperties或GetProperties? [也许这会帮助](http://stackoverflow.com/questions/5851274/how-to-get-all-names-of-properties-in-an-entity) – musefan