为什么AutoMapper会将整数字段映射到对象?

时间:2018-10-28 01:40:16

标签: c# automapper

我今天遇到了一个我无法解决的问题。 Automapper会将整数字段映射到对象字段,而无需我告诉它这样做。

以下是我非常精简的相关类,它们再现了该问题:

class Program
{
    static void Main(string[] args)
    {
        Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperRepositoryProfile>());
        var combatant = new Infrastructure.PersistenceModels.Combatant()
        {
            Id = 2,
        };
        var mapped = Mapper.Map<Guy>(combatant);
        // Creates an object with
        // Id = 2
        // abilityStage = {
        //                   Id = 5,
        //                   Name = null
        //                }
    }
}

//Source
public class Combatant
{
    public int Id { get; set; }
    public int abilitystageId { get; set; } = 5;
}

//destination
public class Guy
{
    public int Id { get; set; }
    public AbilityStage abilityStage { get; set; }
}

//PersistenceModels (Source class)
public class AbilityStage
{
    public int Id { get; set; }
    public string Name { get; set; }
}

//Destination class
public class AbilityStage
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class AutoMapperRepositoryProfile : Profile
{
    public AutoMapperRepositoryProfile()
    {
        CreateMap<CombatArena.Core.Entities.AbilityStage, CombatArena.Infrastructure.PersistenceModels.AbilityStage>().ReverseMap();
        CreateMap<CombatArena.Core.Entities.Guy, CombatArena.Infrastructure.PersistenceModels.Combatant>().ReverseMap();
    }
}

以某种方式,这将创建一个对象,以使“ mapped”的ID为2,而“ abilityStage”的ID为5,并且Name为空。我想发生的是“映射”的ID为5,而“ abilityStage”为空。

非常重要的是,如果我将Combatant的“ abilitystageId”属性名称更改为稍微不同的名称(a_abilityStageId,capabilityStageId_等),则不会观察到此行为。这似乎是由于该字段与目标类字段具有相同的名称,但在其末尾带有ID引起的。我试图从头开始在一个新项目中重现此问题,但这种情况并没有在那里发生,所以我对造成此问题的原因不知所措。

谁能告诉我这是什么原因造成的,以及是否有清除此行为的干净方法?

0 个答案:

没有答案