我正在为我的项目实施AuditTrail。
我将实体发送给此功能。
public AuditTrail GetAudit(DbEntityEntry entry)
{
AuditTrail audit = new AuditTrail();
audit.UserName = "Admin";
audit.TableName = GetTableName(entry);
audit.TimeStamp = DateTime.Now.ToString("dd MM yyyy HH:mm:ss");
if (entry.State == System.Data.Entity.EntityState.Added)
{
var newValues = new StringBuilder();
SetAddedProperties(entry, newValues);
audit.NewValue = newValues.ToString();
audit.Action = AuditActions.Added.ToString();
}
return audit;
}
如果添加了EntityState,则此函数正在执行。
private void SetAddedProperties(DbEntityEntry entry, StringBuilder newData)
{
foreach (var propertyName in entry.CurrentValues.PropertyNames)
{
var newVal = entry.CurrentValues[propertyName];
if (newVal != null)
{
newData.AppendFormat("{0}={1} , ", propertyName, newVal);
}
}
if (newData.Length > 0)
newData = newData.Remove(newData.Length - 3, 3);
}
到目前为止我还不错。我可以将日志添加到没有导航属性的AuditTrail表中。但是我的实体中有2个导航属性。这些是下拉列表,并从其他表填充。
导航属性未加载到entry.Currents.PropertyNames中。这些正在记录到表中的不同记录。
例如;