【问题标题】:AutoMapper not mapping correctly when same type相同类型时 AutoMapper 无法正确映射
【发布时间】:2014-02-10 19:34:30
【问题描述】:

我遇到了 AutoMapper(.NET 4.5 上的 3.1.1)库的问题,非常奇怪,非常感谢您的帮助。

我有四个对象:

public class UserDetail
{
    public int Salary { get; set; }
    public Address House { get; set; }
    public Address Office { get; set; }
}

public class UserDetailEntity
{
    public int Salary { get; set; }
    public Guid HouseId { get; set; }
    public Guid? OfficeId { get; set; }
    public virtual AddressEntity House { get; set; }
    public virtual AddressEntity Office { get; set; }
}

public class Address
{
    public string Street { get; set; }
}

public class AddressEntity
{
    public string Street { get; set; }
}

在这种情况下:

Mapper.CreateMap<Address, AddressEntity>();
Mapper.CreateMap<UserDetail, UserDetailEntity>()
    .ForMember("Office", s => s.MapFrom(ud => ud.Office));


UserDetailEntity entity = Mapper.Map<UserDetail, UserDetailEntity>(dto);

Assert.AreEqual(dto.House.Street, entity.House.Street);
Assert.AreEqual(dto.Office.Street, entity.Office.Street);  

办公地址中的断言失败我总是得到房子地址:(

谢谢!

【问题讨论】:

    标签: .net automapper


    【解决方案1】:

    最后我解决了这个问题,AutoMapper 使用 GetHashCode 来确定两个对象是否相同,并且当我覆盖此方法时,在这种情况下哈希码是相同的。

    【讨论】:

    • 你能用工作代码伙伴更新帖子吗?看到解决方案会很有趣。
    • 代码有效,问题是 UserDetail 从 BaseDTO 继承,它覆盖方法 GetHashCode 并且对于对象地址(办公室和房屋)计算的哈希码是相同的,因此对于 AutoMapper 对象是相同,因此映射相同。
    • 这是否意味着 AutoMapper 不会映射任何相同的类,或者是扩展“创建地图”功能的情况?
    • AutoMapper 可以,但是当我将本机方法覆盖为对象的“GetHashCode”时,automapper 使用的方法不起作用。
    • 我能够将类型转换或声明为对象,并且有效。我不确定一个更恰当和优雅的答案会是什么样子。
    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2016-10-13
    • 2016-08-11
    • 2021-07-22
    • 2018-05-06
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多