Как настроить AutoMapper в .Net core 2.2 для пользовательских свойств? - PullRequest
0 голосов
/ 29 апреля 2019

Я настраиваю AutoMapper для моего приложения Asp.Net core 2.2. Как настроить это для пользовательских свойств?

-> В решение добавлен пакет NuGet «AutoMapper.Extensions.Microsoft.DependencyInjection (6.0.0)».

-> Добавлены "services.AddAutoMapper ();" в метод "ConfigureServices" в моем файле startup.cs.

Файл профиля сопоставления:

    using AutoMapper;

    namespace Api.AutoMapperProfiles
    {
        public class MappingProfile : Profile
        {
            public MappingProfile()
            {
                var map = CreateMap<System.Data.DataRow, OneViewModel>();
                map.ForAllOtherMembers(opt => opt.Ignore());
                map.ForMember(d => d.one, o => o.MapFrom(s => s["one"]));
                map.ForMember(d => d.two, o => o.MapFrom(s => s["two"]));
            }
        }
    }

Файл контроллера:

  List<OneViewModel> pr = _mapper.Map<IDataReader, List<OneViewModel>>(ds.Tables[0].CreateDataReader());

Я ожидаю список "OneViewModel" из таблицы данных. Но я получаю сообщение об ошибке, что свойство "Capacity" не отображается. И в моей модели данных или модели нет свойства емкости.

1 Ответ

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

В вашем MappingProfile вы настраиваете отображение от System.Data.DataRow до OneViewModel. То, что вы должны настраивать, это от IDataReader до OneViewModel.

// configure mapping, hope you get the idea
var map = Mapper.CreateMap<IDataReader, CustomerModel>()
  .ForMember(dest => dest.one,
      opt => opt.MapFrom(src => src.GetValue(src.GetOrdinal("one")).ToString())))

// use
using (DataTableReader dr = ds.Tables[0].CreateDataReader())
{
    if (dr.HasRows)
    {
       var pr = AutoMapper.Mapper.Map<IDataReader, IList<OneViewModel>>(dr);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...