【发布时间】:2013-09-27 16:13:02
【问题描述】:
我正在尝试按照这篇文章http://jmdority.wordpress.com/2011/07/20/using-entity-framework-4-1-dbcontext-change-tracking-for-audit-logging/ 在我的带有 EF 应用程序的 MVC 4 中实施审计。
我在修改实体时无法找到更改的属性。我有一个继承自 DbContext 并覆盖 SaveChanges 方法的类。在这个新的 SaveChanges 方法中,我有以下代码来查找更改的属性,其中实体来自 ChangeTracker.Entities()。
foreach (var propertyName in entity.OriginalValues.PropertyNames)
{
var originalValue = entity.OriginalValues.GetValue<object>(propertyName);
var newValue = entity.CurrentValues.GetValue<object>(propertyName);
if (!object.Equals(originalValue, newValue))
{
// Insert an auditing record.
}
}
这个问题是 originalValue 始终等于 newValue,即使尚未将任何内容保存到数据库中。如何获取原始值以便检查属性是否已更改?
提前致谢!
【问题讨论】:
-
显示您的客户端代码(实际上会更改属性值),您的完整
SaveChanges()代码也可能会有所帮助。 -
在检查更改之前,您可能需要致电
context.ChangeTracker.DetectChanges...
标签: entity-framework asp.net-mvc-4