c# - Entity Framework Change Tracking API 和引用条目

标签 c# entity-framework ado.net change-tracking entity-framework-4.1

希望在我的 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 点设置为“Modified”,DbReferenceEntry 类似乎没有 IsModified 属性,也没有原始值。

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

有人能帮忙吗?

谢谢, 本

最佳答案

是引用条目(导航属性)不跟踪更改。这是外键属性(在外键关联的情况下)或独立关联的单独对象跟踪更改的责任。在 ObjectContext API 中,您可以通过 ObjectStateManager 获取这些对象,但 DbContext API 似乎没有此功能。我在 MSDN Forum 上问了一个关于这个的问题.

关于c# - Entity Framework Change Tracking API 和引用条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331936/

相关文章:

java - JPA EntityManager : 'find' vs. 'createQuery' 和 'getResultList'

sql - 预定义查询比使用 ADO.NET 的即席 SQL 查询更有效吗?

c# - 复制 ado.net 数据表列表的最快方法

c# - 如何在 Silverlight 中将一个控件固定在另一个控件下方?

c# - 如何在winforms的datagridview的当前单元格中添加椭圆按钮和文本框

entity-framework - 在 Entity Framework 中更新单个事务中的多个对象

entity-framework - 尝试序列化 Entity Framework 对象时出现 XML 序列化错误

c# - SqlDataReader 读入 List<string>

c# - XML 序列化 - .NET 4.0 中的不同结果

c# - 为什么 const mytype _var = new mytype() 不起作用?