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



我在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;
    }
}

"更新"操作是我陷入困境的地方进入OriginalValues.PropertyNames返回一个数组(System.Data.Entity.Interface.ReadOnlySet`1[System.String]),但我不知道如何获取旧值和新值。

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

我想我在这里找到了一些解决方案。如果有更好的方法,请毫不犹豫地做出贡献。

最新更新