使用实体框架

时间:2016-04-28 21:23:10

标签: entity-framework-6 dbcontext objectcontext

有办法,我可以解决以下情况吗?

我有一个部门实体,如​​下所示,它已填充数据。

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会触发更新同一字段的更新查询。虽然,它没有任何区别。

有没有办法,我可以阻止吗?除了手动检查财产变更外。

1 个答案:

答案 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的议程中,因此您必须手动完成。