如何改网站的内容wordpress 景点模板
如何改网站的内容,wordpress 景点模板,php网站开发专业介绍,制作一个网站数据库怎么做的痰洞南牌前言
Mapster 介绍
安装 Mapster 相关包
在 Program.cs 中注册 Mapster 服务
基础映射一行代码搞定
自定义映射规则
完整示例源代码
image
前言
在日常开发中#xff0c;我们常常需要将一个对象映射到另一个对象#xff0c;比如将数据库实体转换为数据传输对象#…痰洞南牌前言Mapster 介绍安装 Mapster 相关包在 Program.cs 中注册 Mapster 服务基础映射一行代码搞定自定义映射规则完整示例源代码image前言在日常开发中我们常常需要将一个对象映射到另一个对象比如将数据库实体转换为数据传输对象DTO或将请求模型映射为领域模型。这个过程通常涉及大量重复性代码如果每次都手动编写不仅严重影响开发效率而且随着项目规模不断增长还容易出现错误如属性遗漏、手写时写错或复制粘贴失误等。本文我们的主要内容就是讲解如何在 ASP.NET Core 9.0 Web API 项目中使用 Mapster 快速、高效的实现对象映射。Mapster 介绍Mapster 是一个开源免费MIT license、快速、高性能、灵活且易于使用的 .NET 对象映射库用于在 .NET 用程序中进行对象之间的转换和映射操作大幅减少手动赋值带来的重复代码、人为错误和维护成本。安装 Mapster 相关包方式一、NuGet 包管理器安装在 NuGet 包管理器中搜索Mapster 和 Mapster.DependencyInjection 安装Mapster 核心功能包imageMapster.DependencyInjection 依赖注入集成包image方式二、.NET CLI 安装dotnet add package Mapster --version 7.4.0 #核心功能包dotnet add package Mapster.DependencyInjection --version 1.0.1 #依赖注入集成包在 Program.cs 中注册 Mapster 服务var builder WebApplication.CreateBuilder(args);// 注册 Mapster 服务builder.Services.AddMapster();// 注册 Mapster 映射规则MapsterConfig.Register();基础映射一行代码搞定接下来我们分别定义一个源对象Student和一个目标对象StudentViewModel它们的属性名和类型完全一致。Student源对象public classStudent{////// 学生ID [主键自动递增]///[PrimaryKey, AutoIncrement][Display(Name 学生ID)]publicint StudentID { get; set; }////// 班级ID///[Display(Name 班级ID)]publicint ClassID { get; set; }////// 学生姓名///[Display(Name 学生姓名)]publicstring Name { get; set; }////// 学生年龄///[Display(Name 学生年龄)]publicint Age { get; set; }////// 学生性别///[Display(Name 学生性别)]publicstring Gender { get; set; }}StudentViewModel目标对象public classStudentViewModel{////// 学生ID///[PrimaryKey, AutoIncrement][Display(Name 学生ID)]publicint StudentID { get; set; }////// 班级ID///[Display(Name 班级ID)]publicint ClassID { get; set; }////// 学生姓名///[Display(Name 学生姓名)]publicstring Name { get; set; }////// 学生年龄///[Display(Name 学生年龄)]publicint Age { get; set; }////// 学生性别///[Display(Name 学生性别)]publicstring Gender { get; set; }////// 班级名称///[Display(Name 班级名称)]publicstring ClassName { get; set; }}Mapster 自动完成映射只要属性名和类型一致Mapster 自动完成映射无需任何配置private async Task? GetStudentClassInfo(List students){// Mapster 映射无需任何配置var studentsListDto students.Adapt();if (studentsListDto?.Count 0){var classIDs studentsListDto.Select(x x.ClassID).Distinct().ToList();var querySchoolClassList await _schoolClassHelper.QueryAsync(x classIDs.Contains(x.ClassID)).ConfigureAwait(false);if (querySchoolClassList?.Count 0){foreach (var studentItem in studentsListDto){var getClassInfo querySchoolClassList.FirstOrDefault(x x.ClassID studentItem.ClassID);if (getClassInfo ! null){studentItem.ClassName getClassInfo.ClassName;}}}}return studentsListDto;}映射结果输出image自定义映射规则当属性名或类型不一致时可通过配置指定映射逻辑。UserInfo源对象public classUserInfo{publicint Id { get; set; }publicstring FirstName { get; set; }publicstring LastName { get; set; }publicstring Email { get; set; }public DateTime CreatedAt { get; set; }}UserInfoViewModel目标对象public classUserInfoViewModel{publicint Id { get; set; }////// 合并 FirstName LastName///publicstring FullName { get; set; }publicstring Email { get; set; }////// 格式化日期///publicstring CreatedDate { get; set; }}配置 Mapster 映射规则在项目根目录创建 MapsterConfig.cs////// Mapster 全局映射配置类。/// 用于集中注册项目中所有自定义的对象映射规则/// 避免映射逻辑分散在各处提升可维护性与可测试性。///publicstaticclassMapsterConfig{////// 注册所有自定义的 Mapster 映射配置/// 此方法应在应用程序启动时如 Program.cs调用一次///public static void Register(){TypeAdapterConfig.NewConfig().Map(dest dest.FullName,src ${src.FirstName} {src.LastName}.Trim()).Map(dest dest.CreatedDate,src src.CreatedAt.ToString(yyyy-MM-dd));}}自定义映射规则////// 使用 Mapster 映射 UserInfo 示例///[ApiController][Route(api/[controller]/[action])]publicclassUserInfoController : ControllerBase{privatereadonly IMapper _mapper;////// 依赖注入//////mapperpublic UserInfoController(IMapper mapper){_mapper mapper;}////// GetUserInfo//////[HttpGet]public List GetUserInfos(){var userInfos new List{new UserInfo{Id 999,FirstName 李,LastName 四,Email lisiqq.com,CreatedAt DateTime.Now.AddYears(-5)},new UserInfo{Id 666,FirstName 张,LastName 三,Email zhangsanexample.com,CreatedAt DateTime.UtcNow.AddDays(-10)}};// 使用 Mapster 映射var getUserInfoViewModels _mapper.Map(userInfos);return getUserInfoViewModels;}}映射结果输出image完整示例源代码https://github.com/YSGStudyHards/EasySQLiteimage