Попытка использовать AutoMapper со списками возвращает ошибку «Индекс был вне диапазона». - PullRequest
0 голосов
/ 01 апреля 2019

Я пытался заставить AutoMapper работать со списками, но всякий раз, когда я пытаюсь это сделать, он всегда возвращает одну и ту же ошибку:

Индекс был вне диапазона.Должен быть неотрицательным и меньше размера коллекции. \ R \ nИмя параметра: index

Я упростил код, но в основном это класс, который я хочу отобразить:

public class PlayerCar
{
    public string Manufacturer { get; set; }
    public string Name { get; set; }
}

public class Player
{
    public List<PlayerCar> Cars { get; set; }
    public string OwnerName { get; set; }
    public string OwnerUsername { get; set; }
}

Это исходный класс:

public class Users
{
    public int Id { get; set; }
    public string Username { get; set; }
    public Account User { get; set; }
}

public class Account 
{
    public string Name { get; set; }
    public List<UserCar> Cars { get; set; }
}

public class UserCar
{
    public string Manufacturer { get; set; }
    public string Name { get; set; }
    public int Year { get; set; }
    public string Colour { get; set; }
}

Это используемая мной схема сопоставления:

CreateMap<Users, Player>()
    .ForMember(c => c.OwnerUsername, opt => opt.MapFrom(c => c.Username))
    .ForMember(c => c.OwnerName, opt => opt.MapFrom(c => c.User.Name))
    .ForMember(c => c.Cars, opt => opt.MapFrom(c => c.User.Cars));

CreateMap<UserCar, PlayerCar>()
    .ForMember(c => c.Manufacturer, opt => opt.MapFrom(c => c.Manufacturer))
    .ForMember(c => c.Name, opt => opt.MapFrom(c => c.Name));

Не знаюзнаю, влияет ли это на что-нибудь, но я делаю .ProjectTo<Player>(_mapper.ConfigurationProvider).

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 01 апреля 2019

Где-нибудь инициализируются списки?

Разве вам не нужно делать отдельные явные сопоставления для пользовательского автомобиля и проигрывателя?Я не думал, что это позволит использовать вложенные отображения.

CreateMap<Player, Account>()
     .ForMember(p => p.Cars, opts => opts.MapFrom(a => a.Cars))

... ForMember(c => c.Cars, opt => opt.MapFrom(c => c.User));
...