如何将ObjectStateEntry.OriginalValues转换为Entity?
我以为我可以使用ObjectContext.Translate
方法执行此操作,但我必须传递DataReader。有什么方法吗?
答案 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())
);
}
}