1

我想将数据映射IDateReader到某个类,但不能简单地做到这一点。我写了以下代码:

 cfg.CreateMap<IDataReader, MyDto>()
      .ForMember(x => x.Id, opt => opt.MapFrom(rdr => rdr["Id"]))
      .ForMember(x => x.Name, opt => opt.MapFrom(rdr => rdr["Name"]))
      .ForMember(x => x.Text, opt => opt.MapFrom(rdr => rdr["Text"]));

UPD:我尝试使用 Nuget 中的 Automapper.Data 但它依赖于 NETStandard.Library 但我使用 .NET Framework 4.5 但这种方式对我不利,因为我必须为每一列描述映射规则。是否可以避免描述所有这些规则?

4

1 回答 1

1

您可以使用ITypeConverter,例如:

public class DataReaderConverter<TDto> : ITypeConverter<IDataReader, TDto> where TDto : new
{
    public TDto Convert(IDataReader source, TDto destination, ResolutionContext context)
    {
        if (destination == null)
        {
            destination = new TDto();
        }

        typeof(TDto).GetProperties()
            .ToList()
            .ForEach(property => property.SetValue(destination, source[property.Name]));
    }
}


cfg.CreateMap<IDataReader, MyDto>().ConvertUsing(new DataReaderConverter<MyDto>());
于 2018-01-10T13:27:13.883 回答