如何从DbEntityEntry-中获取外部列的值?

时间:2018-11-29 11:07:39

标签: c# asp.net-mvc audit-trail

我正在为我的项目实施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中。这些正在记录到表中的不同记录。

例如;

enter image description here

0 个答案:

没有答案