【发布时间】:2016-09-23 11:45:23
【问题描述】:
我有这门课。
public class ConflictItem<T> where T : new()
{
public T CurrentItem { get; set; }
public T RequestedUpdateItem { get; set; }
}
其中 T 实现 bool Equals(object obj)、int GetHashCode() 和 IEquatable<SyncObject>。
假设您有IEnumerable<ConflictItem<Order>> 并映射到IEnumerable<ConflictItem<OrderDataObject>>,这将调用Equals 和GetHashCode,我不明白原因。
问题是映射的结果对象ConflictItem<OrderDataObject> 最终在 CurrentItem 和 RequestedUpdateItem 属性中具有相同的对象实例。
我的简单 Automapper 配置。
config.CreateMap<ConflictItem<Order>, ConflictItem<OrderDataObject>>().ReverseMap();
config.CreateMap<Order, OrderDataObject>().ReverseMap();
我了解列表中或两个对象之间的对象相等性,但为什么 Automapper 会匹配另一个对象中两个不同属性的相等性?有没有办法通过配置覆盖这种行为?
【问题讨论】:
-
这不只是底层集合本身吗?
-
我用问题更新了问题,我最终收到一个 ConflictItem
在两个属性中具有相同的对象实例。 -
如何调用
Equals导致这两个属性发生变化?我怀疑你实际上有一个糟糕的映射配置。您能否展示您的映射方式以及您在哪里看到Equals被调用? -
我知道这太奇怪了,我也无法解释,但我通过在类中的 Equals overiden 实现中设置断点进行了验证。添加配置。
-
stackoverflow.com/questions/21612176/… 这是同一个问题。也许在这里:stackoverflow.com/questions/11333732/… 可怕的行为。投票最多的解决方案也很糟糕。
标签: c# automapper