如何将ObjectStateEntry.OriginalValues转换为实体?

时间:2010-09-10 17:09:49

标签: .net entity-framework

如何将ObjectStateEntry.OriginalValues转换为Entity? 我以为我可以使用ObjectContext.Translate方法执行此操作,但我必须传递DataReader。有什么方法吗?

1 个答案:

答案 0 :(得分:3)

为了将OriginalValues转换为Entity对象,您可以对属性使用反射(您将名称隐藏在OriginalValues.DataRecordInfo.FieldMetadata[i].FieldType.Name中)。但是,你之后打算做什么呢?比较属性property-by-property?直接获取修改后的属性列表会更容易:

var originalValues = yourEntry.OriginalValues;
var currentValues = yourEntry.CurrentValues;
var modifiedProperties = yourEntry.GetModifiedProperties();

foreach (var modifiedProperty in modifiedProperties)
{
    LogChange(string.Format("Property: {0}, Original value: {1}, Current value: {2}", 
                            modifiedProperty,
                            originalValues[modifiedProperty],
                            currentValues[modifiedProperty])
    );
}

或者,您可以为实体对象实现OnSomePropertyChanging方法并实时记录更改:

public partial class YourEntity
{
    partial void OnSomePropertyChanging(string value)
    {
        LogChange(String.Format("Property: SomeProperty, Original value: {0}, Current value: {1}, Change time: {2}", 
                  this.SomeProperty,
                  value,
                  DateTime.Now.ToShortTimeString())
        );
    }
}