在 class 中映射相同的对象类型属性会调用 Equals 和 GetHashCode

Mapping same object type properties in a class invokes Equals and GetHashCode

我有这个class。

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 会匹配另一个对象中两个不同属性的相等性?有什么方法可以通过配置覆盖此行为吗?

该库似乎在 Map 方法上添加了一个禁用缓存的选项:

var output = Mapper.Map<T1, T2>(input, opt => opt.DisableCache = true);

尝试一下,看看是否能解决您的问题。

我一直在查看 GitHub 上的 5.0 Beta 版本,他们似乎默认禁用了此缓存:​​

https://github.com/AutoMapper/AutoMapper/releases/tag/v5.0.0-beta-1