我在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]),但我不知道如何获取旧值和新值。
很抱歉,如果这个问题很愚蠢。你能给我一些建议怎么做或提供另一种方法吗?