AutoMapper 和 IDataReader
AutoMapper and IDataReader
我想将数据从 IDateReader
映射到某些 class 但不能简单地做到这一点。我写了下面的代码:
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
但这种方式对我不利,因为我必须为每一列描述映射规则。是否可以避免描述所有这些规则?
您可以使用 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>());
我想将数据从 IDateReader
映射到某些 class 但不能简单地做到这一点。我写了下面的代码:
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 但这种方式对我不利,因为我必须为每一列描述映射规则。是否可以避免描述所有这些规则?
您可以使用 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>());