手动跟踪Entity DbContext中的更改并将更改保存到另一个DbSet中

时间:2013-12-16 19:25:52

标签: c# asp.net-mvc entity-framework

我在ASP.NET MVC项目中提供了一个“更新”页面,使“管理员”能够使用来自Excel文件的信息更新某些DbSet。如果实体存在于数据库中,我会更新值;在这种情况下,有一个列映射算法,它只更新使用DataTable中的列映射的属性。如果没有,我在上下文中添加一个新实体。

在调用SaveChanges()方法之前,我想跟踪更改,例如是否添加或更新了条目,并将它们保存到另一个名为Changes的DbSet中。对于“更新”方案,我想知道哪些属性已更新,包括旧/新值信息。

foreach (var item in db.Items)
{
    var entry = db.Entry(item);
    switch (entry.State)
    {
        case EntityState.Added:
            Debug.Print("Item added: " + item.Name);
            break;
        case EntityState.Modified:
            Debug.Print("Item updated: " + item.Name);
            Debug.Print("Original: " + entry.OriginalValues.PropertyNames);
            Debug.Print("Current: " + entry.CurrentValues.PropertyNames);
            break;
        case EntityState.Unchanged:
            Debug.Print("No changes detected: " + item.Name);
            break;
    }
}

'更新'操作是我被困住的地方。 'entry.OriginalValues.PropertyNames'返回一个数组(System.Data.Entity.Internal.ReadOnlySet`1 [System.String]),但我不知道如何获取旧值和新值。

很抱歉,如果这个问题很愚蠢。你能给我一些建议怎么做或提供另一种方法吗?

1 个答案:

答案 0 :(得分:0)

我想我找到了一些解决方案here。如果有更好的方法,请不要犹豫。