AutoMapper学习

国产FPGA替代Xilinx Artix-7实战指南:XC7A100T迁移关键路径解析 FPGA国产替代是当前硬件开发的核心议题,尤其在软件无线电(SDR)、雷达信号处理与嵌入式仪器等实时性敏感场景中,器件选型直接决定系统成本、交付周期与技术自主性。其本质并非简单参数对标,而是基于工艺建模、IO电气特性、资源拓扑与IP核架构的系统级适配。以Xilinx Artix-7 XC7A100T-FGG676为基准,国产FPGA需重点应对引脚兼容性下的信号完整性迁移、CLB/BRAM/DSP底层映射差异、DDR3与PCIe等高速接口IP断点,以及温度/电压/工艺角(PVT)鲁棒性重构。本文聚焦SDR典型 阅读详情

http://automapper.org/
这是一款DTO的映射工具,AutoMapper是基于对象到对象约定的映射工具,它可以把复杂的对象模型转为DTO,或者其他的–那些让设计更合理更适于序列化、通信、传递消息的简单对象或者干脆就只是在领域层与应用层之间搭建一个简单的ACL防护层(就像DTO一样,用于代码的显示转换)来增加各自层的相互独立性。

简单来说就是:就是根据A的模型和B的模型中的定义,自动将A模型映射为一个全新的B模型。

前言

VO、DTO、DO、PO、DAO

  • VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
  • DTO(Data Transfer Object):数据传输对象,泛指用于展示层与服务层之间的数据传输对象。
  • DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
  • PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
  • DAO(Data Access Object):数据访问对象,主要用来封装对数据库的操作。

为什么要有DTO

通常我们通过DAO获取PO,PO是和数据库映射的,但是可能包含了很多对于传输来说并不需要的属性。

比如一张表有100个字段,那么对应的PO可能就是100个属性,但是对于表示层而言并不需要那么多属性展示给用户,同样的也不应该把底层表结构暴露给表示层,那么中间就有一个DTO对象的转换,表示层需要多少属性则DTO的设置就定义多少属性。

应用场景

人工转换

我们经常需要有这样的转换,将PO模型转换为实际传递需要的DTO模型,如果人工方式实现就会有一堆如下繁琐、效率低下的代码:

    class Program
    {
        static void Main(string[] args)
        {
            // PO->DTO 的人工转换
            StudentPO po = new StudentPO() { ID = 1, FirstName = "Money", LastName = "Wang", Password = "admin", UserID = "imwyw" };
            StudentDTO dto = new StudentDTO()
            {
                FirstName = po.FirstName,
                LastName = po.LastName,
                UserID = po.UserID
            };
        }
    }
    /// <summary>
    /// Persistence Object
    /// 模拟PO,库表映射对象
    /// </summary>
    public class StudentPO
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Sex { get; set; }
        public DateTime Birth { get; set; }
        public string UserID { get; set; }
        public string Password { get; set; }
        public string Address { get; set; }
    }
    /// <summary>
    /// DTO Data Transport Object 数据传输对象
    /// 轻量级,并不是PO的所有属性
    /// </summary>
    public class StudentDTO
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string UserID { get; set; }
    }

AutoMapper安装

同样,我们通过NuGet程序包管理器进行安装引用:
在这里插入图片描述

默认映射

AutoMapper uses a convention-based matching algorithm to match up source to destination values.
在使用AutoMapper进行映射对象前,还需要initialize AutoMapper,参考官网提欧的方法:

http://automapper.readthedocs.io/en/latest/Static-and-Instance-API.html
我们以官网中提供的static api作为示例:

class Program
{
    static void Main(string[] args)
    {
        MapperInit();
        StudentPO po = new StudentPO() { ID = 1, FirstName = "Money", LastName = "Wang", Password = "admin", UserID = "imwyw" };
        //使用Mapper 将po转换为dto
        StudentDTO dto1 = AutoMapper.Mapper.Map<StudentPO, StudentDTO>(po);
        //使用Mapper 将dto转换为po,没有的属性赋默认值
        StudentPO po1 = AutoMapper.Mapper.Map<StudentDTO, StudentPO>(new StudentDTO() { FirstName = "First", LastName = "Last", UserID = "samsung" });
    }
    /// <summary>
    /// Mapper初始化,在程序启动的时候进行一次初始化
    /// You now must use either Mapper.Initialize or new MapperConfiguration() to initialize AutoMapper. 
    /// If you prefer to keep the static usage, use Mapper.Initialize.
    /// </summary>
    static void MapperInit()
    {
        //static api 我们使用静态方法进行初始化
        AutoMapper.Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<StudentPO, StudentDTO>();
            cfg.CreateMap<StudentDTO, StudentPO>();
        });
        //在程序启动时对所有的配置进行严格的验证
        AutoMapper.Mapper.AssertConfigurationIsValid();
    }
}
/// <summary>
/// Persistence Object
/// 模拟PO,库表映射对象
/// </summary>
public class StudentPO
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Sex { get; set; }
    public DateTime Birth { get; set; }
    public string UserID { get; set; }
    public string Password { get; set; }
    public string Address { get; set; }
}
/// <summary>
/// DTO Data Transport Object 数据传输对象
/// 轻量级,并不是PO的所有属性
/// </summary>
public class StudentDTO
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UserID { get; set; }
}

Reverse Mapping

反向映射,在上述的示例中,进行了PO->DTO和DTO->PO转换的映射,我们也可以通过反向映射来代替:

//static api 我们使用静态方法进行初始化
AutoMapper.Mapper.Initialize(cfg =>
{
    cfg.CreateMap<StudentPO, StudentDTO>().ReverseMap();
    //cfg.CreateMap<StudentDTO, StudentPO>(); 不再需要
});

Customizing reverse mapping

默认的映射有时候可能并不符合我们的需求,对于以下属性名称并不相同的映射需求,我们可以ForMember()自定义映射关系:

class Program
{
    static void Main(string[] args)
    {
        AutoMapper.Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<StudentPO, StudentDTO>()
            .ForMember(des => des.EnName, op => op.MapFrom(src => src.ZhName))
            //.ForMember("EnName", op => op.MapFrom(src => src.ZhName)) ForMember重载,作用同上
            .ReverseMap();
        });
        StudentDTO dto = AutoMapper.Mapper.Map<StudentPO, StudentDTO>(new StudentPO() { ZhName = "杰克" });
        StudentPO po = AutoMapper.Mapper.Map<StudentDTO, StudentPO>(new StudentDTO() { EnName = "jack" });
    }
}
public class StudentPO
{
    public string ZhName { get; set; }
}
public class StudentDTO
{
    public string EnName { get; set; }
}

在映射对象时,我们还可以进行自定义的投影操作,可以在lambda表达式中定义我们需要的任意投影需要:

class Program
{
    static void Main(string[] args)
    {
        AutoMapper.Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<BirthInfo, BirthDto>()
            .ForMember(des => des.BirthYear, op => op.MapFrom(src => src.Birth.Year))
            .ForMember(des => des.BirthMonth, op => op.MapFrom(src => src.Birth.Month))
            .ForMember(des => des.BirthDay, op => op.MapFrom(src => src.Birth.Day));
        });
        BirthDto dto = AutoMapper.Mapper.Map<BirthInfo, BirthDto>(new BirthInfo() { Name = "Jack", Birth = Convert.ToDateTime("1900-9-19") });
    }
}
public class BirthInfo
{
    public string Name { get; set; }
    public DateTime Birth { get; set; }
}
public class BirthDto
{
    public string Name { get; set; }
    public int BirthYear { get; set; }
    public int BirthMonth { get; set; }
    public int BirthDay { get; set; }
}
SAP 销售订单及发票 利润中心替代 Userexit出口 配置及程序 在跨公司销售业务中,跨公司销售订单的发票时无法从销售订单中将利润中心带到发票中,所以在跨公司的发票创建过程中需要配置出口来获取对应销售订单行项目的利润中心。 事务代码: 0KEM 配置步骤: 1、创建一个新的替代 2、创建一个步骤 3、维护一个先决条件,比如针对于特定工厂 PCASUB-VKBUR = '0001' 4、选择替代程序FORM,FORM必须为指定程序中存在的FORM名 5、编辑替代程序FORM 实现效果: 在程序FORM中打上断点 ... 阅读详情

相关推荐

代号OneNET02 STM32+ESP8266 WIFI系列-第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级

第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级,这一节主要是实现通过OneNET OTA服务器将需要更新的程序远程下载到STM32单片机,这一节主要是引导程序和应用程序的讲解。

weixin_44862509的博客 1904

AutoMapper 基本使用 Mapster

1、Initialize:Mapper 初始化 Mapper.Initialize(x => x.CreateMap<Destination, Source>() ); Mapper.Initialize(cfg => { cfg.CreateMap<Aliens, Person>(); }); Mapper.Initialize(cfg...

KingCruel的专栏 1829

STM32 上 FreeRTOS 的启动与任务调度详解

4. SysTick定时器:FreeRTOS启动调度器后,会接管STM32的SysTick定时器,用于生成系统节拍,因此不要在HAL库中重复配置SysTick(比如HAL_Init()中已配置,无需再手动调用SysTick_Config()),否则会导致系统节拍异常,任务延迟不准。2. 任务栈大小需按需配置,不是越大越好(浪费RAM),也不能太小(会导致栈溢出),比如简单的传感器读取任务,1024字(4096字节)足够,复杂任务(比如串口接收+数据解析)可调整为2048字。

qq_40170041的博客 866

AutoMapper的使用

什么是AutoMapper? 在多层结构中,经常用到对象到对象的转化,比如数据库Entity到Model的转化,Model和ViewModel的转换,手工去写复制太过麻烦。AutoMapper就是一个可以实现自动转换的类库。 AutoMapper是一个对象与对象的映射器。对象-对象映射通过将一种类型的输入对象转换为不同类型的输出对象来工作。让AutoMapper感兴趣的是,它提供了一些有趣的约...

技术专栏 3360

VS Code配置Java开发环境避坑指南:从JDK到Spring Boot插件全流程

本文详细介绍了在VS Code中配置Java开发环境的完整流程,涵盖JDK选择、环境变量配置、核心插件安装、构建工具优化及Spring Boot项目专项设置。特别针对常见问题提供避坑方案,帮助开发者快速搭建高效稳定的开发环境,提升Java和Spring Boot开发效率。

weixin_28839699的博客 976

Android 12,通过JNI写framebuff实现白板书写加速

Android 书写加速

448313096@qq.com 1202

AutoMapper——Map之实体的桥梁(二)

通过本次讲述,我们知道了AutoMapper是实体转换模型,他可以将两个相同或者不相同的实体进行相互转化,还可以转化两个实体集,当然AutoMapper的功能远不止这些,它更多的功能还需要我们进一步了解。其实我们在实际工作中没必要非用AutoMapper来转化,只是我们用了之后事情会变的很简单,所以我们不仅要完成任务,更要提高完成任务的效率,这就要求我们多听多看,博览群书,见多识广,这样才能够充分的利用已有的知识,提高我们的生活质量。

追梦 4535

Hyperledger Fabric 网络搭建详解

写在前面:博主也是因为一些原因刚刚入坑区块链,我认为在我们入门新技术的时候,入门总是最困难的部分,只要入门了,后面学习起来就会越来越轻松,在网上找了很多文章,我觉得大多条理不是很清楚。本文章会详细介绍fabric(v1.0)环境部署,以及在搭建过程我遇到一些问题及解决方案,希望可以帮助到你们。 博主环境机器:VMware15 Ubuntu16.04 fabric(v1.0)环境部署一、必备软件安装1.ubuntu环境安装2.Go语言3.Docker安装4. Docker-Compose 安装二、Fa.

林中有神君 1万+

AutoMapper用法

AutoMapper是对象到对象的映射工具。在完成映射规则之后,AutoMapper可以将源对象转换为目标对象。 作者:齐飞 原文:http://www.qeefee.com/article/automapper 配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我们需要先进行映射规则的配置。 public class Source { ...

weixin_33806914的博客 529

Playwright Test Agent 实战:零代码基础也能写自动化测试「喂饭教程」

本文详细介绍了Playwright智能体的三大核心组件:规划智能体设计测试策略,生成智能体转换用例为代码,修复智能体自动修正失败测试。教程包含环境配置步骤、智能体使用方法和实战案例,展示了如何通过自然语言指令快速创建稳定的测试脚本。相比传统方法,Playwright智能体大幅降低测试自动化门槛,提升效率并减少维护成本,使测试人员无需编码基础也能实现高质量的自动化测试。

blues_C的博客 2016

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device, Quartus的安装过程不同于ISE/vivado的安装。“Current license file does not support”这种情况多出现在高版本的quartus中综合很久以前的代码,使用很早型号的FPGA或是CPLD。对于这种情况,就得在官网或是其他网站上下载包含所需Device的库文件。

夜半少年的博客 1万+

AutoMapper总结

  AutoMapper是一个对象和对象间的映射器。对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的。让AutoMapper有意思的地方在于它提供了一些将类型A映射到类型B这种无聊的事情的有趣惯例。只要类型B遵守AutoMapper已经建立的惯例,大多数情况下,映射两种类型零配置就可以了。   首先,需要有source(源)和d...

weixin_34348174的博客 313

图像修复的万能模型:用Instruct-IPT统一解决去雨、去雾、去模糊三大难题

从原理到实战,你已经掌握了Instruct-IPT的核心逻辑和使用方法。它不仅能一站式解决多种图像退化问题,还能通过文本指令灵活控制,是图像恢复领域的“多面手”。现在,不妨找几张有雨雪、雾霾、模糊问题的图像,用Instruct-IPT亲手试试效果。当你看到模糊的图像变得清晰,被雨雾遮挡的细节重新浮现时,你会真切感受到这项技术的魅力。后续还可以尝试调整文本指令的描述方式,看看模型的响应有什么变化——探索的过程,就是你技术进阶的最好见证。

m0_71589036的博客 225

关于对象映射器-AutoMapper学习。

我接触AutoMapper比较晚,目前已经是8.0了。那么以前都是自己写表达式,但是现在的话,会用到更多的功能,所以选择了AutoMapper,除了AutoMapper以外其实还有很多的,对象映射器,比如TinyMapper,不过现在的TinyMapper不支持dotnet core ,所以我就暂时用不到了。 我们可以看一下官方文档,了解如何简单使用AutoMapper。 后面的时间,我会努力更新...

二等碗 813

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

AutoMapper 基础知识学习

http://automapper.org/ 这是一款DTO的映射工具,AutoMapper是基于对象到对象约定的映射工具,它可以把复杂的对象模型转为DTO,或者其他的–那些让设计更合理更适于序列化、通信、传递消息的简单对象或者干脆就只是在领域层与应用层之间搭建一个简单的ACL防护层(就像DTO一样,用于代码的显示转换)来增加各自层的相互独立性。 简单来说就是:就是根据A的模型和B的模型中的定义,自动将A模型映射为一个全新的B模型。 前言 VO、DTO、DO、PO、DAO VO(View Object.

极客神殿 458

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ABP框架学习之——AutoMapper。

网上关于abp框架的学习的文章很多。本文大部分也是摘自其他作者的文章。 官方api文档:https://aspnetboilerplate.com/api-docs/html/N_Abp_AutoMapper.htm 简单说一下 什么是AutoMapper? AutoMapper是一个对象和对象间的映射器。对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作

易兒善 3116

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

AutoMapper 学习笔记

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AutoMapper; using System.Data; namespace ConsoleApplication2 { class Prog

wem520的专栏 3854

WPF实战学习笔记11-配置AutoMapper

在Program.cs 中。添加automapper。

xinzhiya001的博客 568

AutoMapper学习笔记

进入公司后学习到的东西,之前记录在github上 现在搬运过来 AutoMapperDemo 需要安装两个包 AutoMapper AutoMapper.Extensions.Microsoft.DependencyInjection //需要依赖注入AutoMapper,需要下载该包。 在Startup中添加AutoMapper: public void ConfigureServices...

weixin_30307267的博客 174

AutoMapper初步学习

AutoMapper初步学习 AutoMapper初学入门 前言 在一个应用程序中,如果在两个不同的类型对象之间传输数据,通常我们会用DTOs(数据传输对象),View Models(视图模型),或者直接是一些从一个service或者Web API的一些请求或应答对象。一个常见的需要使用数据传输对象的情况是,我们想把属于一个对象的某些属性值赋值给另一个对象的某些属性值,但是问...

weixin_34248258的博客 213

转 AutoMapper 学习

AutoMapper是一个.NET的对象映射工具。 项目地址:https://github.com/AutoMapper/AutoMapper。 帮助文档:https://github.com/AutoMapper/AutoMapper/wiki 主要用途 领域对象与DTO之间的转换、数据库查询结果映射至实体对象。 使用笔记 场景1:源类型BlogEntry,目标类型BlogPostD...

weixin_33907511的博客 80

【.NET】AutoMapper学习记录

在两个不同的类型对象之间传输数据,通常我们会用DTOs(数据传输对象),AutoMapper就是将一个对象自动转换为另一个对象的技术 背景 一些orm框架,在用到Entity的时候有一些开源代码用到了automapper(如:nopcommence),将数据对象转成DTO。比如在ORM中,与数据库交互用的Model模型是具有很多属性变量方法神马的。而当我们与其它系统(或系统中的其它结构)进行数...

weixin_34194379的博客 260

.Net Core 学习——AutoMapper

引入AutoMapper的包: install-package AutoMapper install-packageAutoMapper.Extensions.Microsoft.DependencyInjection Profile的用法:   Profile提供了一个命名的映射类,所有继承自Profile类的子类都是一个映射集合。这里我们创建一个UserProfile继承P...

Abbey_qi的博客 358

学习AutoMapper(一):映射模型

AutoMapper:1、我使用的是 .net 7.0 WebAPI,以下代码是在Controllers里面实现。2、图一是我数据库的数据,自己可创建Model模拟数据,图一role必须要有name,图二必须要有roleName3、目的是为了做 model 模型的映射,图二不想要那么多模型,只想拿取图一role里面的name值,映射到图二roleName

weixin_45132755的博客 935

automapper自动创建映射_.NetCore学习笔记:四、AutoMapper对象映射

什么是automapper?automapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码。这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来为我们做?我们来看看在.netcore3.1中怎样使用automapper9.0。1 public class basicprofile : profile, iprofile2 {3 pub...

weixin_28767599的博客 719

(重要)实体与DTO以及AutoMapper框架学习

AutoMapper 官网:http://automapper.org/ 源码:https://github.com/AutoMapper/AutoMapper 这是一个轻量级的解决对象间映射问题的框架,并且AutoMapper允许我们根据自己的实际需求进行映射配置,使用起来较灵活。 一,使用AutoMapper进行对象间映射https://cloud.tencent.com/developer/...

weixin_40333655的博客 473
上一篇: 位图索引和B tree索引的区别
下一篇: 经典面试题之——如何自由转换两个没有继承关系的字段及类型相同的实体模型,AutoMapper?
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值