AutoMapper для IEnumerable <EFEntityClass>до IEnumerable <ClassViewModel> - PullRequest
0 голосов
/ 21 апреля 2020

У меня возникла ситуация, когда мне пришлось изменить подпись с IQueryable на IEnumerable, и метод расширения .ProjectTo() в AutoMapper перестал работать. Мне нужен альтернативный вариант, и какие изменения в отображении нужно внести, если таковые имеются?

public class PersonService : IPersonService
{
    private readonly IPlaygroundBiRepository _repository;
    private readonly IMapper                 _autoMapper;

    public PersonService(IPlaygroundBiRepository repository, IMapper autoMapper)
    {
        _repository = repository;
        _autoMapper = autoMapper;
    }

    public async Task<PersonViewModel> GetPersonByIdAsync(int id) => new PersonViewModel(await _repository.GetPersonByIdAsync(id));

    public IEnumerable<PersonViewModel> GetPersons() => _repository.GetPersons().ProjectTo<PersonViewModel>(_autoMapper.ConfigurationProvider);       
}

Вот как AutoMapper настраивается в инфраструктурном проекте:

namespace DesignTracker.Application.AutoMapper
{
    public class AutoMapperConfiguration
    {
        public static MapperConfiguration RegisterMappings()
        {
            return new MapperConfiguration(cfg =>
            {
                // cfg.AddProfile(new ViewModelToDomainProfile());
                cfg.AddProfile(new DomainToViewModelProfile());
            });
        }
    }

    public class DomainToViewModelProfile : Profile
    {
        public DomainToViewModelProfile()
        {
            CreateMap<Person, PersonViewModel>();
        }
    }
}
...