AutoMapper指定列名进行映射

有了AutoMapper,就再也不用进行手工一对一的从IDataReader到实体字段的赋值。这篇博文是一个实际案例的记录。

实体类型定义如下:

public class UploadImage
{
    public int Id { get; set; }
    public string Src { get; set; }
}

Src属性在数据库中对应的字段名为ImageUrl。

映射要求:从IDataReader到IEnumerable<UploadImage>,代码如下:

using (var conn = new SqlConnection(ConnectionStrings.Default))
{
    using (var command = conn.CreateCommand())
    {
        command.CommandType = System.Data.CommandType.Text;
        command.CommandText = "...";
        await conn.OpenAsync();
        using (IDataReader reader = await command.ExecuteReaderAsync())
        {
            return AutoMapper.Mapper.Map<IDataReader, IEnumerable<UploadImage>>(reader);
        }
    }
}

通过 IMappingExpression.ForMember() 方法配置AutoMapper可以实现这个映射,代码如下:

//这里非常具有代表性AutoMapper.Mapper.CreateMap<IDataReader, UploadImage>()
    .ForMember(dest => dest.Src, options => options.MapFrom(
            src => src.GetString(src.GetOrdinal("ImageUrl")))); 
时间: 05-21

AutoMapper指定列名进行映射的相关文章

SQLServer获取临时表所有列名或是否存在指定列名的方法

获取临时表中所有列名 select name from tempdb.dbo.syscolumns where id=object_id( '#TempTB') 判断临时表中是否存在指定列名 if col_length('tempdb.dbo.#TempTB','columnName') is not null print '存在' else print '不存在' SQLServer获取临时表所有列名或是否存在指定列名的方法

AutoMapper多个源映射到一个Dto

AutoMapper多个源映射到一个Dto 首先要引入AutoMapper(我电脑用的8.0,9.0版本) 1. 定义源映射对象 Model如下: 实体Social /// <summary> /// 社会属性 /// </summary> public class Social { public int Age { get; set; } public bool IsMarried { get; set; } public string Name { get; set; } }

Java判断数据库结果集ResultSet 中是否存在指定列名

最近最项目,项目的持久化部分用的是spring jdbc,查询出来的结果集要映射为对象,每次都在查询SQL的方法内定义私有的mapper 变量,内部实现mapRow 方法,似乎有些浪费,就想着定义一个公用的mapRow 实现,节省代码,方便维护. 在写的过程中,发现一个问题,就是涉及到一个很大的对象,属性非常多,但每次查询出来的属性却又都不一样,这样的公用mapRow 该怎么写呢,能否根据结果集中是否有某个属性,才让其映射,没有的就不再映射呢? 立马翻开jdk api,找到ResultSet ,

AutoMapper 创建嵌套对象映射(原创)

之前在做DTO转换时,用到AutoMapper.但DTO的层次太深了,无奈官方没针对嵌套类型提供好的解决方案,于是自己实现了一下: 思路:采用递归和反射很好的避免手工创建嵌套对象的映射. 第一个版本,已经提交到:https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings 1 /// <summary> 2 /// 递归创建类型间的映射关系 (Recursively create mappings between types) 3

AutoMapper搬运工之自定义映射

回顾 上节说到了AutoMapper的简单使用,对于复杂的Mapping需要强大的自定义,这节我们来看下AutoMapper的自定义Mapping(Projection) 搬运自Git:https://github.com/AutoMapper/AutoMapper/wiki/Projection 实例 本篇的场景是一个简单的日历事件,我们首先定义一个日历的事件如下: 1 public class CalendarEvent 2 { 3 //事件日期 4 public DateTime Date

.Net Core使用AutoMapper做对象关系映射

我想很多后端开发者,纠结于如何在Dto及表实体中做属性关系映射,因为真的太繁琐了., ⒈如何使用? 1 Mapper.Initialize(cfg => cfg.CreateMap<UsersInputDto, Users>()); 2 UsersInputDto input = new UsersInputDto() 3 { 4 id = 1, firstname = "fan", lastname = "qi", uname = "f

遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍

今天遇到了AutoMapper的一个性能问题,使用的是AutoMapper的Project特性,AutoMapper版本是3.3.0,代码如下: return await _repository .GetByStartId(startIngId, itemCount) .Project() .To<TDto>() .ToListAsync(); 当获取包含200条数据的列表时,竟然超过5秒. GetDocs(3000, 200) 6304ms GetDocs(3000, 200) 5822ms

如何用python提取Excel中指定列名的数据

#coding=utf-8 import xlrd,chardet,traceback #根据列名获取相应序号 def getColumnIndex(table,columnName): columnIndex=None for i in range(table.ncols): if(table.cell_value(0,i)==columnName): columnIndex=i break return columnIndex #根据Excel中sheet名称读取数据 def readExc

c# 扩展LINQ的order by函数支持通过字符串来指定列名并支持多列

本文借鉴了https://blog.csdn.net/lan_liang/article/details/68523451. 将字符串转换为orderby的linq可以极大地减少重复劳动,可是该怎样将多个字段转换为Order()及ThenBy()表达式呢?可以参照以下代码: public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> q, string condition) { string[] co