在实体框架中查找变更集

本文关键字:查找 实体 框架 | 更新日期: 2023-09-27 17:53:54

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

其中一个用户需求是创建一个带有实体更改列表的票据/电子邮件。是否有一种方法,我可以检测仅更改属性上的实体在以下功能?

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

在实体框架中查找变更集

有办法:

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获取更多详细信息

假设您的域服务对象为DsrvObj

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

//这些也可能是有益的

           DsrvObj.HasChanges
           DsrvObj.MS_EntitySets.HasChanges

会给你变更集,但有趣的是,我今天在这个变更集上看不到一些修改过的布尔字段!最后,我意识到,例如,如果一个DataGrid是在EditMode你的更改不去更改集,结束编辑后,它会去更改集。

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