首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在实体框架中获取实体的原始值?

如何在实体框架中获取实体的原始值?
EN

Stack Overflow用户
提问于 2011-11-15 17:17:34
回答 7查看 29.6K关注 0票数 20

在EF 4.0中,如果我理解正确的话,Entity中有两种类型的值:当前值和原始值。

我们可以通过调用ApplyOriginalValues(TEntity)方法来设置原始值,但是如何获得原始值呢?

EN

Stack Overflow用户

发布于 2016-12-06 17:30:45

我遇到了类似的问题,AsNoTracking不适合我的情况,所以我想出了一个对我来说足够好的方法:首先“克隆”实体,然后进行更改。

代码语言:javascript
运行
复制
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;
}

然后将克隆与更改后的克隆进行比较。

代码语言:javascript
运行
复制
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;
}
票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8133974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档