AutoMapper它是一种对象与对象之间的映射器,让AutoMapper有意思的就是在于它提供了一些将类型A映射到类型B这种无聊的实例,只要B遵循AutoMapper已经建立的惯例,那么大多数情况下就可以进行相互映射了。

安装
nuget搜索AutoMapper.Extensions.Microsoft.DependencyInjection 安装,会自动安装AutoMapper

创建Entities文件夹,新建User Model

namespace Blogs.WebApi.Entities
{
public class Users
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Gender { get; set; }
}
}

创建Dto文件夹,新建UsersDto类,为了掩饰,把FistName和LastName合并为FullName

namespace Blogs.WebApi.Dto
{
public class UsersDto
{
public int ID { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
public string Gender { get; set; }
}
}

Startup.cs类增加数据库服务

services.AddDbContext<DataContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Default")));

新建DataContext类,DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)

using Microsoft.EntityFrameworkCore;

namespace Blogs.WebApi.Entities
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options)
{ }
public DbSet<Users> Users { get; set; }
}
}

创建Services文件夹,新建IUsersRepository仓储接口

using System.Collections.Generic;
using System.Threading.Tasks;
using Blogs.WebApi.Entities; namespace Blogs.WebApi.Services
{
public interface IUsersRepository
{
Task<IEnumerable<Users>> GetAllUsers(); //获取所有用户
Task<Users> GetUsersByID(int id); //根据ID查询单个用户
}
}

新建UsersRepository实现IUsersRepository仓储接口

using System.Collections.Generic;
using System.Threading.Tasks;
using Blogs.WebApi.Entities;
using Microsoft.EntityFrameworkCore; namespace Blogs.WebApi.Services
{
public class UsersRepository : IUsersRepository
{
private readonly DataContext _dataContext; public UsersRepository(DataContext dataContext)
{
_dataContext = dataContext;
}
public async Task<IEnumerable<Users>> GetAllUsers()
{
return await _dataContext.Users.AsNoTracking().ToListAsync();
} public async Task<Users> GetUsersByID(int id)
{
return await _dataContext.Users.AsNoTracking().FirstOrDefaultAsync(u => u.ID == id);
}
}
}

Startup.cs类注入服务依赖

//每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
services.AddScoped<IUsersRepository, UsersRepository>();
//获取已加载到此应用程序域的执行上下文中的程序集。详情AppDomain.GetAssemblies 方法
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

新建Profiles文件夹创建UserProfile类创建映射,继承自Profile类映射集合

using AutoMapper;
using Blogs.WebApi.Dto;
using Blogs.WebApi.Entities; namespace Blogs.WebApi.Profiles
{
public class UserProfile : Profile
{
public UserProfile()
{
CreateMap<Users, UsersDto>()
.ForMember(
dest => dest.FullName, opt =>
{
opt.MapFrom(s => s.FirstName + "." + s.LastName);
});
}
}
}

从Controller文件夹创建UsersController控制器

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Blogs.WebApi.Dto;
using Blogs.WebApi.Services;
using Microsoft.AspNetCore.Mvc; namespace Blogs.WebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly IUsersRepository _usersRepository;
private readonly IMapper _mapper; public UsersController(IUsersRepository usersRepository, IMapper mapper)
{
_usersRepository = usersRepository;
_mapper = mapper;
}
// GET: api/<UsersController>
[HttpGet]
public async Task<ActionResult<IEnumerable<UsersDto>>> Get()
{
var users = await _usersRepository.GetAllUsers();
return _mapper.Map<IEnumerable<UsersDto>>(users).ToList();
} // GET api/<UsersController>/5
[HttpGet("{id}")]
public async Task<ActionResult<UsersDto>> Get(int id)
{
var user = await _usersRepository.GetUsersByID(id);
return _mapper.Map<UsersDto>(user);
}
}
}

PostMan效果展示

入门讲解推荐视频https://www.bilibili.com/video/BV1XJ411q7yy?p=12

C# AutoMaper简单使用的更多相关文章

  1. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  2. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  3. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  4. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  5. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  6. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  8. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  9. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

随机推荐

  1. ASP.NET Core下FreeSql的仓储事务

    ASP.NET Core下FreeSql的仓储事务 第一步:配置 Startup.cs 注入 引入包 dotnet add package FreeSql dotnet add package Fre ...

  2. flight.Archives001 / CSS Selectors选择器

    Title/CSS选择器 序 : 这是flight.Archives 梦开始的地方, 作者我熬夜肝出来了这篇文章... 保证这是最简洁高效的 CSS Selectors 教程 Note : 暂时没有能 ...

  3. TestNG注释@BeforeGroups与@AfterGroups不执行的处理

    在学习TestNG框架注解时发现在执行以下的代码 package com.groups; import org.testng.annotations.AfterGroups; import org.t ...

  4. 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案

    2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...

  5. java环境的配置——实现win10下双击直接运行jar文件

    java环境的配置--实现win10下双击直接运行jar文件 在渗透测试的过程中很多工具的安装和使用需要java环境,下面我来介绍一下java环境配置的超详细步骤(包含怎样实现win10下双击直接运行 ...

  6. GC垃圾收集器

    垃圾收集器是垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程. HotSport虚拟机采用分代收集(JVM规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也是这样组合使用的,不过已 ...

  7. Spring详解(八)------常用的连接池配置

    首先,我们准备Jdbc属性文件 jdbc.properties,用于保存连接数据库的信息,利于我们在配置文件中的使用 jdbc.driver=com.mysql.jdbc.Driver jdbc.ur ...

  8. 【ArcEngine】多用户同时编辑同一个版本数据的解决方法

    ArcMap或ArcEngine中,使用多个用户同时编辑default版本的时候,问题就来了,StopEditing 错误信息如下 FDO_E_VERSION_REDEFINED -214721714 ...

  9. (5)air202读取串口数据并上传到阿里云显示

    一.首先进行云端设置 根据串口助手显示的信息,以及模块文档说明我们可以知道 其中red和ir是红光LED的原始数据, HR表示心率值, HRvalid是心率是否有效标识, SP02是血氧数值,,SPO ...

  10. session.flush与transaction.commit

    以session的save方法为例来看一个简单.完整的事务流程,如下是代码片段: ---------------------------- Session session = sessionFacto ...