7

希望在我的 DbContext 子类上编写通用审计代码。

foreach (var entry in this.ChangeTracker.Entries<MyClass>())
{
    if (entry.State == EntityState.Modified)
    {
        var entityProperties = entry.Entity.GetType().GetProperties();
        foreach (var entityProperty in entityProperties)
        {
            DbMemberEntry propertyEntry = entry.Member(property.Name);
            if (propertyEntry is DbPropertyEntry)
            {
                // IsModified available
            }
            else if (propertyEntry is DbReferenceEntry)
            {
                // IsModified not available
            }
        }
    }
}

1)如果我只更改参考属性,entry.State 值为“未更改”。

2) 即使第 1 点设置为“已修改”,DbReferenceEntry 类似乎也没有 IsModified 属性,也没有原始值。

我认为这是可能的,因为 EF 必须跟踪这一点。

任何人都可以帮忙吗?

谢谢,本

4

1 回答 1

7

是的参考条目(导航属性)不跟踪更改。由外键属性(在外键关联的情况下)或独立关联的单独对象跟踪变化负责。在 ObjectContext API 中,您可以通过这些对象获取这些对象,ObjectStateManager但看起来 DbContext API 没有此功能。我在MSDN 论坛上问了一个关于这个的问题。

于 2011-03-17T09:03:07.907 回答