在EF 4.0中,如果我理解正确的话,Entity中有两种类型的值:当前值和原始值。
我们可以通过调用ApplyOriginalValues(TEntity)方法来设置原始值,但是如何获得原始值呢?
发布于 2016-12-06 17:30:45
我遇到了类似的问题,AsNoTracking不适合我的情况,所以我想出了一个对我来说足够好的方法:首先“克隆”实体,然后进行更改。
public T Clone<T>(T entity)
where T : class, new() {
var clone = new T();
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy)
.Where(a => a.CanRead &&
a.CanWrite &&
a.GetMethod.IsFinal);
foreach (var property in properties) {
property.SetValue(clone, property.GetValue(entity));
}
return clone;
}然后将克隆与更改后的克隆进行比较。
public string GenerateChangeText<T>(T original, T current)
where T : class, new() {
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy)
.Where(a => a.CanRead &&
a.CanWrite &&
a.GetMethod.IsFinal);
var changes = string.Empty;
foreach (var property in properties) {
var originalValue = property.GetValue(original);
var currentValue = property.GetValue(current);
if (originalValue == null && currentValue == null) continue;
if ((originalValue != null && !originalValue.Equals(currentValue)) ||
(currentValue != null && !currentValue.Equals(originalValue))) {
changes += $" changed {property} from {original ?? "NULL"} to {current ?? "NULL"}.";
}
}
return changes;
}https://stackoverflow.com/questions/8133974
复制相似问题