У меня возникла проблема при попытке сопоставления моих сущностей с помощью Automapper.
У меня уже есть следующие сопоставления, в которых GearLevel содержит коллекцию Gear и всегда будет 6.
Когда я сопоставляю сущности, если у 'Gear' есть несколько сущностей с одинаковым именем, он отображает только одну из них, поэтому я сопоставлю только одну из этих сущностей.
Если я буду делать что-то ещев моих сопоставлениях, чтобы преодолеть это, и если да, то как мне его настроить?
CreateMap<HeroViewModel, Hero>();
CreateMap<TagViewModel, Tag>();
CreateMap<AbilityViewModel, Ability>();
CreateMap<StatViewModel, Stat>();
CreateMap<GearLevelViewModel, GearLevel>();
CreateMap<GearViewModel, Gear>();
CreateMap<HeroViewModel, RegisterNewHeroCommand>()
.ConstructUsing(c => new RegisterNewHeroCommand(c.Name, c.Damage))
.ForMember(dest => dest.Tags, opt => opt.MapFrom(src => src.Tags))
.ForMember(dest => dest.Abilities, opt => opt.MapFrom(src => src.Abilities))
.ForMember(dest => dest.Stats, opt => opt.MapFrom(src => src.Stats))
.ForMember(dest => dest.GearLevels, opt => opt.MapFrom(src => src.GearLevels));
Я вызываю AutoMapper в следующем коде, и когда он вызывает маппер, у viewModel есть все «Gear» вGearLevel, но когда возвращается 'registerCommand', ему не хватает нескольких 'Gear' в 'GearLevel' с тем же именем.
public async Task Register(HeroViewModel viewModel)
{
try
{
var registerCommand = _mapper.Map<RegisterNewHeroCommand>(viewModel);
await _mediator.SendCommand(registerCommand);
}
catch (Exception exception)
{
_logger.LogError(exception, $"Failed to register '{viewModel.Name}'");
}
}
При этом используются следующие объекты:
public class HeroViewModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public int? Damage { get; set; }
public List<TagViewModel> Tags { get; set; }
public List<AbilityViewModel> Abilities { get; set; }
public List<StatViewModel> Stats { get; set; }
public List<GearLevelViewModel> GearLevels { get; set; }
}
public class GearLevelViewModel
{
public Guid Id { get; set; }
public int? Level { get; set; }
public List<GearViewModel> Gear { get; set; }
}
public class GearViewModel
{
public Guid Id { get; set; }
public string Name { get; set; }
}
И следующие команды:
public class RegisterNewHeroCommand : HeroCommand
{
public RegisterNewHeroCommand(string name, int? damage)
{
Name = name;
Damage = damage;
}
}
public abstract class HeroCommand : Command
{
public Guid Id { get; protected set; }
public string Name { get; protected set; }
public int? Damage { get; protected set; }
public List<Tag> Tags { get; protected set; }
public List<Ability> Abilities { get; protected set; }
public List<Stat> Stats { get; protected set; }
public List<GearLevel> GearLevels { get; protected set; }
}