我已经实现了一个覆盖保存更改方法,以捕获对数据库表中的实体所做的更改。它在某些情况下效果很好,但我发现在一种情况下它会失效。
public override int SaveChanges()
{
var modifiedEntities = ChangeTracker.Entries()
.Where(p => p.State == EntityState.Modified).ToList();
在我的dbcontext中,我在这里检查修改后的实体,然后将其更新前的值与更新后的值进行比较,如下所示:
originalValue = change.OriginalValues[prop].ToString();
currentValue = change.CurrentValues[prop].ToString();
这适用于我在更新代码中命名drop字段的情况,如下所示:
entity.property1 = entityUpdated.property1;
我的问题出现在我们拥有大数据集的地方,并且不希望像这样设置所有字段。我们倾向于使用它来更新这些更大的实体:
_entities.Entry(updatedEntity).State = EntityState.Modified
当涉及到检查这些时,change.OriginalValues [prop]已经“丢失”原始值以支持新值 - 我假设由于设置了状态。然后愚弄原始和当前的比较,没有记录任何变化。
我的更新代码中是否可以执行任何操作以避免必须单独设置每个属性?我喜欢EntityState.Modified的易用性,但如果它杀死了我的更改跟踪,我们显然无法使用它。
非常感谢