.net 如何将ObjectStateEntry.originalValue转换为实体?
如何将ObjectStateEntry.originalValue转换为实体?.net 如何将ObjectStateEntry.originalValue转换为实体?,.net,entity-framework,.net,Entity Framework,如何将ObjectStateEntry.originalValue转换为实体? 我想我可以用ObjectContext.Translate方法来实现这一点,但我必须传递DataReader。有什么方法吗?为了将原始值转换为实体对象,您可以对属性使用反射(将名称隐藏在原始值.DataRecordInfo.FieldMetadata[i].FieldType.Name中)。不过,你以后打算做什么?按属性比较实体属性?直接获取修改属性的列表会更容易: var originalValues = your
我想我可以用
ObjectContext.Translate
方法来实现这一点,但我必须传递DataReader。有什么方法吗?为了将原始值
转换为实体
对象,您可以对属性使用反射(将名称隐藏在原始值.DataRecordInfo.FieldMetadata[i].FieldType.Name中)。不过,你以后打算做什么?按属性比较实体属性?直接获取修改属性的列表会更容易:
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])
);
}
或者,您可以为实体对象实现onSomePropertyChange
方法,并实时记录更改:
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())
);
}
}
我需要实体的审计历史这就是我需要原始状态的方式很酷的答案,我喜欢你的扩展方法。