保持溫和,如果我第一次沒有得到這個術語,我的第一篇文章很抱歉。審計實體框架操作
在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