我在ASP.NET MVC3 / WCF应用程序中使用EF4存储库。我正在使用工作单元模式将更改应用于数据库
用户要求之一是创建一个票证/电子邮件,其中包含对实体的更改列表。有没有办法在以下函数中只检测实体上已更改的属性?
public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
var set = CreateObjectSet<T>();
set.ApplyCurrentValues(modifiedEntity);
}
答案 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中,您的更改不会转到更改集,在结束编辑后,它将转到更改集。
实施它,测试它,相信它!