Automapper не отображает все дочерние объекты в дочерней коллекции - PullRequest
0 голосов
/ 25 марта 2019

У меня возникла проблема при попытке сопоставления моих сущностей с помощью 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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...