AutoMapper官方文档(十七)【配置】

AutoMapper 使用手册以及扩展 可以看到,映射后,dto 中两个元素的类型,一个是 EmployeeDto,一个是 EmployeeDto2,即实现了父类映射到父类,子类映射到子类。/// 数据源的成员变量的命名规则。/// 数据源的成员变量的命名规则。/// new PascalCaseNamingConvention() 帕斯卡命名规则(每个单词的首字母大写) 阅读详情

创建一个MapperConfiguration实例并通过构造函数初始化配置:

var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Foo, Bar>();
    cfg.AddProfile<FooProfile>();
});

MapperConfiguration实例可以静态存储在一个静态字段中,也可以存储在一个依赖注入容器中。 一旦创建,不能更改/修改。

或者,您可以使用静态Mapper实例来初始化AutoMapper:

Mapper.Initialize(cfg => {
    cfg.CreateMap<Foo, Bar>();
    cfg.AddProfile<FooProfile>();
});

配置文件实例

组织您的映射配置的一个好方法是使用配置文件。 创建从配置文件继承的类,并将配置放置在构造函数中:

//这是从版本5开始的方法
public class OrganizationProfile : Profile
{
    public OrganizationProfile()
    {
        CreateMap<Foo, FooDto>();
        // 使用CreateMap ...等等。这里(配置文件方法与配置方法相同)
    }
}

// 4.x是如何完成的 - 从5.0开始已经过时了:
// public class OrganizationProfile : Profile
// {
//     protected override void Configure()
//     {
//         CreateMap<Foo, FooDto>();
//     }
// }

在早期版本中,使用配置方法而不是构造函数。 从版本5开始,Configure()已经过时。 它将在6.0中被删除。

配置文件中的配置仅适用于配置文件中的映射。 应用于根配置的配置适用于所有创建的映射。

程序集扫描自动配置

配置文件可以通过多种方式添加到主映射器配置中,可以直接:

cfg.AddProfile<OrganizationProfile>();
cfg.AddProfile(new OrganizationProfile());

或通过自动扫描配置文件:

//扫描程序集中的所有配置文件
//...使用实例方法:
var config = new MapperConfiguration(cfg => {
    cfg.AddProfiles(myAssembly);
});
// ...或静态方法:
Mapper.Initialize(cfg => cfg.AddProfiles(myAssembly));

//也可以使用程序集名称:
Mapper.Initialize(cfg =>
    cfg.AddProfiles(new [] {
        "Foo.UI",
        "Foo.Core"
    });
);

//或程序集的标记类型:
Mapper.Initialize(cfg =>
    cfg.AddProfiles(new [] {
        typeof(HomeController),
        typeof(Entity)
    });
);

AutoMapper将扫描指定的程序集,以继承从配置文件继承的类,并将其添加到配置中。

命名约定

您可以设置源和目标命名约定

Mapper.Initialize(cfg => {
  cfg.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
  cfg.DestinationMemberNamingConvention = new PascalCaseNamingConvention();
});

这会将以下属性映射到对方:property_name -> PropertyName

您也可以在每个配置文件级别进行设置

public class OrganizationProfile : Profile
{
  public OrganizationProfile()
  {
    SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
    DestinationMemberNamingConvention = new PascalCaseNamingConvention();
    //Put your CreateMap... Etc.. here
  }
}

替换字符

您还可以在成员名称匹配期间替换源成员中的单个字符或整个单词:

public class Source
{
    public int Value { get; set; }
    public int Ävíator { get; set; }
    public int SubAirlinaFlight { get; set; }
}
public class Destination
{
    public int Value { get; set; }
    public int Aviator { get; set; }
    public int SubAirlineFlight { get; set; }
}

我们要替换个别字符,也许转换一个单词:

Mapper.Initialize(c =>
{
    c.ReplaceMemberName("Ä", "A");
    c.ReplaceMemberName("í", "i");
    c.ReplaceMemberName("Airlina", "Airline");
});

识别前/后缀

有时你的源/目标属性会有共同的前/后缀,导致你必须做一堆自定义成员映射,因为名称不匹配。 为了解决这个问题,你可以识别前/后缀:

public class Source {
    public int frmValue { get; set; }
    public int frmValue2 { get; set; }
}
public class Dest {
    public int Value { get; set; }
    public int Value2 { get; set; }
}
Mapper.Initialize(cfg => {
    cfg.RecognizePrefixes("frm");
    cfg.CreateMap<Source, Dest>();
});
Mapper.AssertConfigurationIsValid();

默认情况下,AutoMapper可以识别前缀“Get”,如果需要清除前缀:

Mapper.Initialize(cfg => {
    cfg.ClearPrefixes();
    cfg.RecognizePrefixes("tmp");
});

全局属性/字段过滤

默认情况下,AutoMapper尝试映射每个公共属性/字段。 您可以使用属性/字段过滤器过滤出属性/字段:

Mapper.Initialize(cfg =>
{
    //不要映射任何字段
    cfg.ShouldMapField = fi => false;

    // map properties with a public or private getter
    //映射 公共或私有访问器的属性
    cfg.ShouldMapProperty = pi =>
        pi.GetMethod != null && (pi.GetMethod.IsPublic || pi.GetMethod.IsPrivate);
});

配置可见性

默认情况下,AutoMapper只识别公共成员。 它可以映射到私有设置器,但如果整个属性是私人/内部的,则会跳过内部/私有方法和属性。 要指示AutoMapper识别具有其他可见性的成员,请覆盖默认过滤器ShouldMapField和/或ShouldMapProperty:

Mapper.Initialize(cfg =>
{
    // map properties with public or internal getters
    cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
    cfg.CreateMap<Source, Destination>();
});

映射配置现在可以识别内部/私人成员。

配置编译

由于表达式编译可能会占用大量资源,因此AutoMapper会在第一个映射上编译类型映射计划。 但是,这种行为并不总是可取的,所以你可以告诉AutoMapper直接编译它的映射:

Mapper.Initialize(cfg => {});
Mapper.Configuration.CompileMappings();

对于几百个映射,这可能需要几秒钟的时间。

重置静态映射配置

静态Mapper.Initialize只能被调用一次。 重置静态映射配置(例如,在测试开始时):

Mapper.Reset();

Mapper.Initialize(cfg => { /* 再次配置 */ });

生产代码中不应该使用重置。 它旨在仅支持测试场景。

AutoMapper的使用 1.包含AutoMapper.dll 在工程的Lib文件夹下 2.AutoMapper用法 - Qi Fei - 博客园.png 参考图片 3.工程为简单的代码演示,有注释,请大家参考 立即下载

相关推荐

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 216

AutoMapper官方文档(一)【入门】

什么是AutoMapper?AutoMapper是一个对象与对象的映射器。对象-对象映射通过将一种类型的输入对象转换为不同类型的输出对象来工作。让AutoMapper感兴趣的是,它提供了一些有趣的约定,从而弄清楚如何将类型A映射到类型B.只要类型B遵循AutoMapper建立的约定,映射两种类型几乎就是零配置。为什么使用AutoMapper?映射代码很无聊。测试映射代码更无聊。 AutoMapper

极客神殿 8244

【嵌入式面经】上海 70迈 线上笔试

“关注|点赞|收藏” 福利干货第一时间送达!最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!

qq_56921854的博客 1134

2.1配置(AutoMapper官方文档翻译)

automapper configuration

yan_yu_lv_ji的博客 653

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 3027

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

1.1入门指南(AutoMapper官方文档翻译)

AutoMapper是一个对象-对象映射器。对象-对象映射的工作原理是将一种类型的输入对象转换为不同类型的输出对象。AutoMapper的有趣之处在于,它提供了一些有趣的约定,将如何将类型A映射到类型B的繁琐工作解决掉。只要类型B遵循AutoMapper的既定约定,映射两个类型几乎不需要任何配置。

yan_yu_lv_ji的博客 919

Transformer在量化交易中的应用:从时序预测到策略生成

Transformer模型凭借其强大的自注意力机制,在自然语言处理领域取得了革命性突破。其核心原理是通过并行计算和动态权重分配,有效捕捉序列数据中的长距离依赖关系。这一特性使其在金融时间序列分析中展现出巨大技术价值,能够处理市场数据中的复杂非线性模式和长期关联。在量化交易场景下,Transformer可将价格、成交量等连续数据通过离散化分桶处理,转化为类似文本的序列,进而进行预测或直接生成交易信号。本文以QuantGPT项目为例,探讨了如何将这一前沿AI架构迁移应用于金融领域,涵盖了从数据作为“语言”的编码

weixin_26757949的博客 363

【转】ABP源码分析一:整体项目结构及目录

ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序。 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module).其中13个依赖于Abp这个核心包。另外两个包(FluentMigration,Web.Resources)相对独立 Abp.AutoMapper:实现对象之间的自动映射。 Abp.EntityFramework:通过EntityFramework实现数据访问层。 Abp.FluentMigra.

sinolover的专栏 1343

告别卡顿!在RK3588上优化Gstreamer推拉流与RKNN推理的完整Pipeline实战

本文详细介绍了在RK3588平台上优化Gstreamer推拉流与RKNN推理的全链路Pipeline实战。通过解码环节参数调优、RKNN线程管理、内存预分配策略以及编码输出优化,实现60FPS流畅处理与亚秒级延迟。特别针对实时视频分析场景,提供了从rtspsrc到appsink的毫秒级优化方案,助力开发者构建零卡顿的智能视觉系统。

weixin_30698527的博客 481

OsgEarth —— 笔记1 - 创建地球的earth文件

效果         正文      1、准备一张全球的渲染图(tif格式)、一张全球的高程图(tif格式)        2、创建并编写.earth文件           在步骤1目录下创建china-simple.earth,并将如下内容写入。 <map name="Globe" type="geocentric" version="2"> <!-- 全球影像图 --> <image name="GlobeImage" driver="gdal"> &l

7681

EF架构~系列目录

回到占占推荐博客索引 EF架构系列主是我在项目开发中,总结出现的一些经验性的东西,拿出来与大家分享,哪块与的有问题,还请大家指出来,然后我们一些再去讲究! EF架构~系列目录 第一回  EF架构~了解一下,ADO.NET Entity Framework 第二回  EF架构~终于自己架构了一个相对完整的EF方案 第三回  EF架构开发续,终于实现了Update方法的统一 第四回  EF...

weixin_33750452的博客 145

MATLAB计算干旱指标:SPI、SRI、SWAP、DWAAI、EDI等

简介各种干旱指数以及其MATLAB代码实现

WW、forever的博客 2万+

【.NET Core微服务实战-统一身份认证】开篇及目录索引

原文:【.NET Core微服务实战-统一身份认证】开篇及目录索引简介 ​ 学习.NETCORE也有1年多时间了,发现.NETCORE项目实战系列教程很少,都是介绍开源项目或基础教程,对于那些观望的朋友不能形成很好的学习思路,遇到问题怕无法得到解决而不敢再实际项目中尝试,今天我想通过项目系列实战的方式,进一步推广应用.NETCORE,让大家感受它的魅力以及已经无所不能的神奇魔力,我会从实...

weixin_30905133的博客 111

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

FreeSql (二十二)Dto 映射查询

适合喜欢使用 dto 的朋友,很多时候 entity 与 dto 属性名相同,属性数据又不完全一致。 有的人先查回所有字段数据,再使用 AutoMapper 映射。 我们的功能是先映射,再只查询映射好的字段,节省了io性能。 Select<Tag>().Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Tit...

weixin_30882895的博客 291

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

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

ABP源码分析一:整体项目结构及目录

ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序。 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module).其中13个依赖于Abp这个核心包。另外两个包(FluentMigration,Web.Resources)相对独立 Abp.AutoMapper: 实现对象之间的自动映射。 Abp.En...

weixin_34268579的博客 146

老张 .NetCore与Vue 框架学习

缘起    作为一个.Net攻城狮已经4年有余了,一直不温不火,正好近来项目不是很忙,闲得无聊,搞一搞新技术,一方面是打发无聊的时间,一方面也是督促自己该学习辣!身边的大...

dotNET跨平台 4753

Python+MySQL数据分析实战:泡泡玛特热门评论分析项目拆解

数据分析是当前数字化岗位中的核心技能,其完整链路通常涵盖数据获取、清洗、入库、聚合统计、可视化及业务结论输出。在技术实现上,Python凭借Pandas、Jieba等生态成为数据处理主力,而MySQL则提供稳定的结构化存储与查询能力。理解二者的衔接原理,例如通过SQLAlchemy批量写入、合理设计utf8mb4字符集以兼容中文与Emoji,是避免乱码和性能瓶颈的关键。这类技能在电商评论口碑分析、用户反馈挖掘等场景中具有很强的工程实践价值。本文以泡泡玛特热门评论分析为例,介绍如何基于评论数据完成评分分布、系

weixin_34128839的博客 357
上一篇: AutoMapper官方文档(十六)【可查询扩展】
下一篇: AutoMapper官方文档(十八)【条件映射,开放泛型,了解你的映射】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值