【发布时间】:2016-05-03 17:29:31
【问题描述】:
我已经构建了一个实体,我采用了一个实例化实体和一个修改后的实体。这允许我保存初始数据,与修改后的数据进行比较。问题是,理想的方法是什么?我应该实现IEquatable 作为Object.Equals 的覆盖还是实现ICompare?我最初的实现是:
var properties = typeof(TEntity).GetProperties();
foreach(var property in properties)
{
var initialEntity = original.GetType().GetProperty(property.Name).GetValue(original, null);
var modifiedEntity = userChange.GetType().GetProperty(property.Name).GetValue(userChange, null);
if(initialEntity.Equals(modifiedEntity) == false && !ignore.Contains(property.Name))
{
// Do Something
}
}
我的理解是它会返回一个boolean,在这种情况下它也会比较 Value Equality,我假设它是基于引用相等性进行比较的。
因为它从不区分,所以在任何情况下都保持平等。
【问题讨论】:
-
确定不是同一个实例?
-
那些是 linq 实体吗?如果是,那么 ObjectStateManager 已经保存了您对其所做的所有更改
-
您可能想查看我几个月前发布的一些项目:TrackerDog。它已经完成了您想要实现的目标!
标签: c# asp.net generics reflection