获取属于另一个类的类的属性值

时间:2017-10-04 12:04:11

标签: c# entity-framework c#-4.0 audit

我的课程类似:

  public class foo{

        public string FooProp1 {get; set;}

        public Bar Bar{get; set;}

    }

 public class Bar{

      public string BarProp1 {get; set;}

      public string BarProp2 {get; set;}

    }

我有一些审核设置,如果我更新Foo,那么我可以获得除了' Bar'之外的所有属性的属性名称和值。有没有办法获得' BarProp1'。

的属性名称和价值
  private void ProcessModifiedEntries(Guid transactionId) {
     foreach (DbEntityEntry entry in ChangeTracker.Entries().Where(t => t.State == EntityState.Modified).ToList()) {
        Track audit = CreateAudit(entry, transactionId, "U");

        foreach (var propertyName in entry.CurrentValues.PropertyNames) {

              string newValue = entry.CurrentValues[propertyName]?.ToString();
              string originalValue = entry.OriginalValues[propertyName]?.ToString();                  
              SetAuditProperty(entry, propertyName, originalValue, audit, newValue);             
        }
     }
  }

我想在Foo改变时审核BarProp1。

1 个答案:

答案 0 :(得分:0)

您希望课程向审核系统报告其他信息。我认为最好的方法是使用CreateAudit方法。问题是如何。

可以在那里为每个传入的entry做一些特殊的代码:

var foo = entry.Entity as Foo;
if (foo != null)
{
    // do something with foo.Bar
}

var boo = entry.Entity as Boo;
if (boo != null)
{
    // do something with boo.Far
}

当然,这不是很漂亮。

如果您有多个需要向审核员报告其他信息的类,我会定义一个接口并将其添加到每个类中:

public interface IAuditable
{
    string AuditInfo { get; }
}

public class Foo : IAuditable
{
    public string FooProp1 { get; set; }
    public Bar Bar { get; set; }

    [NotMapped]
    public string AuditInfo
    {
        get { return Bar?.BarProp1; }
    }
}

然后在CreateAudit

var auditable = entry.Entity as IAuditable;
if (auditable != null)
{
    // do something with auditable.AuditInfo
}

即使只有一个类需要这种行为,我仍然会使用该接口,因为它使你的代码不言自明。