我今天遇到了一个我无法解决的问题。 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引起的。我试图从头开始在一个新项目中重现此问题,但这种情况并没有在那里发生,所以我对造成此问题的原因不知所措。
谁能告诉我这是什么原因造成的,以及是否有清除此行为的干净方法?