1

我正在尝试记录对数据库的更改,以便用户可以看到谁更改了什么。我正在使用DbEntityEntry来查看并记录DbPropertyEntity已修改的内容。当我想记录对导航属性的更改时遇到了问题。我使用该Reference()方法来获取对导航属性的引用,但与 不同的是DbPropertyEntityDbReferenceEntry它没有OriginalValue唯一的CurrentValue属性。你如何获得OriginalValue导航属性?

//Get the field that hold the id of the foreign key
var field = entry.Property(x => x.field);

//Check to see if the user changed the value
if (field.IsModified)
{
    //Get the reference property associated with the field
    var fieldRef = entry.Reference(x => x.fieldRef);

    //Log the id change
    Log(field.Name, field.CurrentValue, field.OriginalValue);

    //Can't get the OriginalValue
    Log(fieldRef.Name, fieldRef.CurrentValue, ???);
}
4

1 回答 1

1

您究竟希望记录什么以供参考?

如果要记录关系更改(= 外键更改),则应将外键映射为单独的属性,并将其记录为普通字段。如果您不映射外键,则您有一个独立的关联。DbContext API 中对独立关联的支持是有限的。完全支持仅在 ObjectContext API 中(您可以从 DbContext API 使用它)但它仍然不能解决您的问题 - 独立关联不能处于修改状态。它可以处于未更改、已添加或已删除状态。如果您更改引用,旧关联将被标记为已删除并添加新关联 = 上下文跟踪两个单独的关联对象。

于 2012-07-11T20:43:05.403 回答