Сегодня я столкнулся с проблемой, которую просто не могу понять.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();
}
}
Каким-то образом это создает объект, такой, что у "сопоставленного" есть Id 2, с "Способность", который имеет идентификатор 5 и нулевое имя.Я хочу, чтобы «сопоставленный» имел Id 5 и «ilityStage », который является нулевым.
Очень важно, что если я изменяю имя свойства Combatant "ablestageId" на что-то немного другое (a_abilityStageId ,ilityStageId_ и т. Д.), Я не наблюдаю такого поведения.Кажется, это связано с тем, что поле имеет то же имя, что и поле класса назначения, но с Id в конце.Я пытался воспроизвести это в новом проекте с нуля, и этого там не происходит, поэтому я просто в растерянности относительно того, что вызывает это.
Может кто-нибудь сказать мне, что может быть причиной этого, и еслиесть чистый способ отключить это поведение?