在 Entity Framework 中,如何在保存前查看更改?

In Entity Framework, how can I see changes before saving?

是否有一种方法可以调用 Entity Framework 来查看已更改(在内存中)并在调用 SaveChanges 时将写入磁盘的数据?

我想向用户显示一些内容,表明有未保存的更改。 Table 级别没问题,但我更想知道某个 field/column 是否有未保存的更改。

简单枚举ChangeTracker.Entries to examine all the tracked entities, and their EntityEntry.State.

例如,将此方法添加到您的上下文中:

IEnumerable<(string Key, string Entity, EntityState state,
    IEnumerable<(string Property, object OriginalValue, object CurrentValue)> Properties)> GetChanges()
{
    var states = new[] { EntityState.Added, EntityState.Modified, EntityState.Deleted };
    return this.ChangeTracker.Entries().Where(c => states.Contains(c.State))
        .Select(entry =>
            (
                string.Join(",", entry.Metadata.FindPrimaryKey()
                    .Properties.Select(p => p.PropertyInfo.GetValue(entry.Entity))),
                entry.Metadata.ClrType.Name,
                entry.State,
                entry.Properties
                    .Where(p => p.IsModified == (p.EntityEntry.State == EntityState.Modified))
                    .Select(prop =>
                    (
                        prop.Metadata.PropertyInfo.Name, 
                        prop.OriginalValue, 
                        prop.CurrentValue
                    )
            )));
}

它 returns 添加、修改或删除了实体对象,列出了它们的 class 名称(不是 table 名称)及其属性,以及原始值和当前值。还包括键值,以便能够区分相同类型的对象。

在修改的实体中,仅列出更改的属性。