.NET CORE 中用AutoMapper将实体转Dto
.NET CORE 中用AutoMapper将实体转Dto
星速云 2019-08-31 10:06:02 193 收藏
展开
在开发过程中,经常会碰到数据实体对象(Entity)和数据传输对象(Dto)的转换,手写代码太烦太LOW,可以用 AutoMapper 按规则自动转换。
1、安装两个依赖包,通过Nuget安装
AutoMapper
AutoMapper.Extensions.Microsoft.DependencyInjection //startup 中 services.AddAutoMapper(); 需要依赖此包。
2、在Startup中添加AutoMapper
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//添加对AutoMapper的支持,会查找所有程序集中继承了 Profile 的类,,,,,,,牛逼啊,下面的类自动调用到了 AutoMapperConfigs: Profile,他说“会查找所有程序集中继承了 Profile 的类”
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}
3、创建AutoMapper映射规则,继承 Profile
public class AutoMapperConfigs: Profile
{
//添加你的实体映射关系.
public AutoMapperConfigs()
{
//UserEntity转UserDto.
CreateMap<UserEntity, UserDto>()
//映射发生之前
.BeforeMap((source,dto) => {
//可以较为精确的控制输出数据格式
dto.CreateTime = Convert.ToDateTime(source.CreateTime).ToString("yyyy-MM-dd");
})
//映射发生之后
.AfterMap((source, dto) => {
//code ...
});
//UserDto转UserEntity.
CreateMap<UserDto, UserEntity>();
}
}
4、在Controller构造函数中注入IMapper,然后在方法中使用
public class UserController : Controller
{
private readonly IMapper _mapper;
public UserController(IMapper mapper)
{
_mapper = mapper;
}
[HttpGet]
public JsonResult Get(int id=1)
{
//模拟数据
var user = new UserEntity() { Id = id, UserName = "UserA" };
//实体对象转Dto对象
var userDto = _mapper.Map<UserDto>(user);
return new JsonResult(userDto);
}
[HttpGet]
public JsonResult Get()
{
//模拟数据
var users = new List<UserEntity>();
for (int i=0;i<5;i++)
{
users.Add( new UserEntity() { Id = i, UserName = $"User{i}" });
}
//实体对象集合转Dto对象集合
var userDtos = _mapper.Map<List<UserDto>>(usesr);
return new JsonResult(userDtos);
}
}
————————————————
原文链接:https://blog.csdn.net/wx_15323880413/article/details/100169581
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)