在 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
我有这个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