在实体框架中查找变更集

时间:2011-04-27 15:21:57

标签: c# .net entity-framework entity-framework-4

我在ASP.NET MVC3 / WCF应用程序中使用EF4存储库。我正在使用工作单元模式将更改应用于数据库

用户要求之一是创建一个票证/电子邮件,其中包含对实体的更改列表。有没有办法在以下函数中只检测实体上已更改的属性?

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
}

2 个答案:

答案 0 :(得分:2)

是的,有办法:

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
    var entry = ObjectStateManager.GetObjectStateEntry(modifiedEntity);
    // entry has two collections: CurrentValues (those you applied) and 
    // OriginalValues (those loaded from DB)
    // It also have method GetModifiedProperties to get collection of modified 
    // property names.
}

查看ObjectStateEntry了解详情。

答案 1 :(得分:0)

假设您的域服务对象是DsrvObj

 DsrvObj.EntityContainer.GetChanges() 
                      ...GetChanges().AddedEntities.Count /*also possible for modified and romoved ones*/

//这些也可能是有益的

           DsrvObj.HasChanges
           DsrvObj.MS_EntitySets.HasChanges

将为您提供变更集,但有趣的是,我今天无法在此变更集上看到一些修改过的布尔字段!最后我意识到,例如,如果DataGrid在EditMode中,您的更改不会转到更改集,在结束编辑后,它将转到更改集。

实施它,测试它,相信它!