DbPropertyEntry获取原始值

时间:2012-07-11 15:59:50

标签: c# .net entity-framework

我正在尝试将更改记录到数据库中,以便用户可以看到谁更改了内容。我正在使用DbEntityEntry查看并记录已修改的DbPropertyEntity。当我想将更改记录到导航属性时,我遇到了问题。我使用Reference()方法来引用导航属性,但与DbPropertyEntity不同,DbReferenceEntry没有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, ???);
}

1 个答案:

答案 0 :(得分:1)

您希望记录哪些参考资料?

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