我的课程类似:
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。
答案 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
}
即使只有一个类需要这种行为,我仍然会使用该接口,因为它使你的代码不言自明。