有办法,我可以解决以下情况吗?
我有一个部门实体,如下所示,它已填充数据。
public int ID { get; set; }
public string Name { get; set; }
public string Location { get; set; }
我正在更改名称和位置属性。 以下假设属性的值:
Name="HR";
Location="Location1";
当数据在我的应用程序中流动时,这两个值会变为原始值以外的值。
Name="IT";
Location="Location2";
现在,我再次将属性值设置为之前的值。
Name="HR";
Location="Location1";
在调用context.SaveChanges()时,EF会触发更新同一字段的更新查询。虽然,它没有任何区别。
有没有办法,我可以阻止吗?除了手动检查财产变更外。
答案 0 :(得分:0)
您可以使用此小方法取消错误更改:
void MarkRealChanges(DbEntityEntry entry)
{
foreach (var name in entry.OriginalValues.PropertyNames)
{
entry.Property(name).IsModified =
!entry.OriginalValues[name].Equals(entry.CurrentValues[name]);
}
}
用法:
MarkRealChanges(context.Entry(department));
上下文存储已加载的每个实体的原始值。在使用上下文时,在许多情况下,更改跟踪器执行DetectChanges
,其存储实体的当前值,并在存在差异时将属性标记为已更改。显然,恢复此标记从未出现在EF的议程中,因此您必须手动完成。