最新要闻
- 实时焦点:不是我说 iPhone拍照怎么就像富士相机了?
- 世界热推荐:NVIDIA黄仁勋:我们从未忘记游戏玩家!
- 号称使用AI独立管理基金的私募改口了:AI并非主要用于交易 热点
- 人间第一情歌词完整版原唱_人间第一情歌词|全球看热讯
- 实时焦点:今金贷最新退付消息:2023年兑付最新声明退付通知(退付进展告知)
- 曝华为版ChatGPT将下月发布 名为“盘古Chat”-当前独家
- 每日热议!128秒回顾中国载人航天高燃时刻:杨利伟 居功至伟!
- 【环球报资讯】假鸡翅怎么做法?
- 撼迅AMD显卡抹错硅脂 温度高达110℃!曝生产线自证清白
- MPV无敌手 比亚迪赵长江:腾势D9月销将达1.5万-每日看点
- 专访:美国没有资格充当民主人权教师爷——访俄政治学家米尔扎扬-世界热消息
- 可提速400公里!成渝中线高铁两大隧道同时进洞
- 天涯老用户自救 结果一地鸡毛:情怀 是最不值钱的东西
- 24点结束 腾讯视频VIP年卡+京东PLUS年卡138元 环球热门
- 十字军东征——现代社会可能重演吗?
- 京东手机金榜出炉:Redmi K60力压iPhone 14夺冠
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
ASP.NET Core MVC 从入门到精通之自动映射(二)-独家焦点
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。
经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启动运行,以及命名约定,创建控制器,视图,模型,接收参数,传递数据ViewData,ViewBag,路由,页面布局,wwwroot和客户端库,Razor语法,EnityFrameworkCore与数据库,HttpContext,Request,Response,Session,序列化,文件上传,自动映射等内容,今天继续讲解ASP.NET Core MVC 中自动映射第二部分等相关内容,仅供学习分享使用。
经过上一篇文章的讲解,已经对ASP.NET Core中进行自动映射,有了一个初步的了解,今天继续接着上一篇文章进行讲解自动映射的第二部分内容。
(资料图)
字符替换
在实际开发中,如果映射源存在一些特殊字符【如:ë ,Ă等】,映射目标是正常的字符,则需要进行替换,才能映射。如下所示:
1 var configuration = new MapperConfiguration(c =>2 {3 c.ReplaceMemberName("Ä", "A");4 c.ReplaceMemberName("í", "i");5 c.ReplaceMemberName("Airlina", "Airline");6 });
进行以上配置之后,会自动将Äbc
映射到Abc
上,将íng
映射到ing
上,将AirlinaMark
映射到AirlineMark
上。
自动映射匹配前缀与后缀
数据源一般都会有固定的风格,如带有前缀,后缀等标识。那么如何将带前缀的属性映射到不带前缀的的属性上呢?
默认情况下,带前缀是无法自动映射的。如下错误示例,映射源有一个前缀s,映射目标没有,则无法进行自动映射。如下:
可以在映射匹配文件中,增加映射前缀RecognizePrefixes("s"),如下所示:
1 namespace DemoCoreMVC.Profiles 2 { 3 public class AutomapProfile:Profile 4 { 5 public AutomapProfile() 6 { 7 RecognizePrefixes("s"); 8 SourceMemberNamingConvention = new LowerUnderscoreNamingConvention(); 9 DestinationMemberNamingConvention = new PascalCaseNamingConvention();10 //创建映射关系11 CreateMap();12 }13 }14 }
经过前缀设置后,则可以进行自动映射,如下所示:
关于映射匹配前缀后缀设置,有以下几点需要注意:
- 一般前缀都是具有一定规律的设置,否则有些前缀a,有些前缀b,没有一定的规律,则无法完全匹配。
- 后缀通过RecognizePostfixes("s");设置即可,功能测试与前缀一致。
- 取消前缀设置ClearPrefixes();就是取消所有的前缀设置列表中设置的前缀。Automapper默认匹配了Get前缀,如果不需要可以清除。
映射控制(不常用)
使用ShouldMapField和ShouldMapProperty控制哪些属性和字段能够被映射
1 cfg.ShouldMapField = fi => false;2 cfg.ShouldMapProperty = pi =>pi.GetMethod != null && (pi.GetMethod.IsPublic || pi.GetMethod.IsPrivate);
默认所有public的field和property都会被map,也会map private 的setter,但是不会map整个property都是internal/private的属性。
列表映射
在实际工作中,列表的应用场景还是比较多的,列表映射也比较常用。如下所示:
1 [HttpPost]2 public IActionResult Add(StudentViewModel studentViewModel)3 {4 var listStudents=new List();5 listStudents.Add(studentViewModel);6 var students = mapper.Map ,List< Student>>(listStudents);7 studentService.Adds(students);8 return View();9 }
经过测试发现,只要映射了元素类型,列表可以自动映射。如下所示:
AutoMapper默认会自动映射以下类型:
IEnumerable
IEnumerable
ICollection
ICollection
IList
IList
List
Arrays
这几个集合之间可以相互映射,如:mapper.Map
手动控制映射(不常用)
如果对于完全没有任何规律的映射,如何进行呢?如下两个映射数据类型:映射源类型:
1 namespace DemoCoreMVC.ViewModels 2 { 3 public class UserViewModel 4 { 5 public int UserId { get; set; } 6 7 public string UserName { get; set; } 8 9 public string Mail { get; set; }10 }11 }
映射目标类型:
1 namespace DemoCoreMVC.Models 2 { 3 public class User 4 { 5 public int Id { get; set; } 6 7 public string Name { get; set; } 8 9 public string Email { get; set; }10 }11 }
需要手动配置映射属性列,如下所示:
1 public class AutomapProfile:Profile 2 { 3 public AutomapProfile() 4 { 5 RecognizePrefixes("s"); 6 //RecognizePostfixes("s"); 7 SourceMemberNamingConvention = new LowerUnderscoreNamingConvention(); 8 DestinationMemberNamingConvention = new PascalCaseNamingConvention(); 9 //创建映射关系10 CreateMap();11 //ClearPrefixes();12 13 CreateMap ()14 .ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.UserId))15 .ForMember(dest => dest.Name, opt => opt.MapFrom(source => source.UserName))16 .ForMember(dest => dest.Email, opt => opt.MapFrom(source => source.Mail));17 }18 }
映射示例
通过手动配置映射列后,就可以实现自动映射,如下所示:
1 public IActionResult Add(UserViewModel userViewModel)2 {3 4 var user = mapper.Map(userViewModel);5 6 return View();7 }
手动映射测试结果如下:
注意:手动映射主要适用于属性完全不一致,没有前缀,后缀,任何规律可言的属性映射的情况,所以一般不太常用。
嵌套映射
对于复杂的嵌套类型,对象的属性可能是一个复杂引用类型对象。
映射源,其中属性User为类型为UserViewModel的引用类型。如下所示:
1 namespace DemoCoreMVC.ViewModels2 {3 public class EmployeeViewModel4 {5 public int Id { get; set; }6 7 public UserViewModel User { get; set; }8 }9 }
映射目标,其中属性Uer为类型为User的引用类型。如下所示:
1 namespace DemoCoreMVC.Models2 {3 public class Employee4 {5 public int Id { get; set; }6 7 public User User { get; set; }8 }9 }
如果要对应复杂的存在嵌套关系的对象进行映射,则需要对属性类型也进行创建映射关系。如下所示:
1 CreateMap()2 .ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.UserId))3 .ForMember(dest => dest.Name, opt => opt.MapFrom(source => source.UserName))4 .ForMember(dest => dest.Email, opt => opt.MapFrom(source => source.Mail));5 CreateMap ();
在控制器中调用,如下所示:
1 public IActionResult Add(UserViewModel userViewModel)2 {3 EmployeeViewModel employeeViewModel = new EmployeeViewModel() { Id = 1, User = userViewModel };4 var employee = mapper.Map(employeeViewModel);5 6 return View();7 }
运行测试,如下所示:
以上就是ASP.NET Core MVC从入门到精通之自动映射的第二部分的全部内容。
大家也可以参考以下文章连接,讲解的更加详细:https://blog.csdn.net/catshitone/article/details/109840926。
关键词:
ASP.NET Core MVC 从入门到精通之自动映射(二)-独家焦点
实时焦点:不是我说 iPhone拍照怎么就像富士相机了?
世界热推荐:NVIDIA黄仁勋:我们从未忘记游戏玩家!
号称使用AI独立管理基金的私募改口了:AI并非主要用于交易 热点
人间第一情歌词完整版原唱_人间第一情歌词|全球看热讯
实时焦点:今金贷最新退付消息:2023年兑付最新声明退付通知(退付进展告知)
曝华为版ChatGPT将下月发布 名为“盘古Chat”-当前独家
每日热议!128秒回顾中国载人航天高燃时刻:杨利伟 居功至伟!
【环球报资讯】假鸡翅怎么做法?
Web安全-渗透测试-基础知识02
Web安全-渗透测试-基础知识01-环球视点
撼迅AMD显卡抹错硅脂 温度高达110℃!曝生产线自证清白
MPV无敌手 比亚迪赵长江:腾势D9月销将达1.5万-每日看点
专访:美国没有资格充当民主人权教师爷——访俄政治学家米尔扎扬-世界热消息
可提速400公里!成渝中线高铁两大隧道同时进洞
天涯老用户自救 结果一地鸡毛:情怀 是最不值钱的东西
24点结束 腾讯视频VIP年卡+京东PLUS年卡138元 环球热门
十字军东征——现代社会可能重演吗?
文心一言 VS 讯飞星火 VS chatgpt (31)-- 算法导论5.2 3题 全球简讯
【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库|世界动态
京东手机金榜出炉:Redmi K60力压iPhone 14夺冠
韧性回弹 脚感澎湃 361°运动拖鞋63元狂促(门店159元)-实时
真正的国产显卡之光!摩尔线程国产GPU、AI与元宇宙多项进展深入解读
中国铁塔:每天为近百万外卖和快递小哥提供换电充电服务
h2o2摩尔质量_h2o2
抢收同时抢种,河南已完成夏播2340万亩
华擎又出妖板!迷你身材 塞进去128个Arm核心 环球热资讯
多国出现人类偏肺病毒感染 一年1.6万儿童死亡!尚无治疗药物
自我的创建
ASP.NET Core 全局异常处理 世界热资讯
世界热门:(ex)BSGS/(扩展)大步小步算法 学习笔记
机会越来越好-与君周末谈20230604
虚幻5国漫巅峰 《斗罗大陆》比比东成神 巨型镰刀秒杀唐三
甚至没动工!《赛博朋克2077》续作明年才将投入开发 播资讯
我的脸被隐翅虫毁容了!千万小心“会飞的硫酸”
积成电子:预中标1.05亿元国家电网采购项目_世界新消息
全球微资讯!时速133严重车祸 车主:感谢驱逐舰05救我一命 又买了辆比亚迪汉
环球热文:马斯克北京首日晚宴多少钱?22人“吃”掉4.5万元
Web安全-渗透测试-基础知识01 世界播资讯
【天天速看料】Leetcode 1156. 单字符重复子串的最大长度
CPU的功能是什么_cpu的主要功能
网友把苹果封死水里一年 打开后水面飘了一层“巧克力”|每日时讯
PS造假神了!_热点评
读改变未来的九大算法笔记03_纠错码
当前报道:《安富莱嵌入式周报》第314期:微软推出开源DeviceScript编程语言适合低资源单片机,开源色度计,超声波穿戴设备,USB-C交换机,CMSIS
京东太狠:100W数据去重,用distinct还是group by,说说理由? 每日速讯
天天滚动:Spring整合mybatis使用xml配置事务
ChatGPT 国内镜像网站独家汇总:发现最优秀的人工智能对话体验!
小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana 全球热点
观点:不打算修!AMD EPYC Rome服务器芯片运行1044天必定死机
全球量产车最低风阻!昊铂Hyper GT本月上市:能耗比Model 3还低|视点
世界最牛计算机课程变样了:接受AI改造
世界聚焦:Codeforces Round 876 (Div. 2)题解
姑姑拍到侄女做梦吃雪糕:画面分分钟萌翻
今头条!比亚迪突然上调车辆保养价格 部分车型涨幅达50%
【世界快播报】女子考科三系错安全带考官面如死灰:“交杯带”看无奈了
小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana
汽车电动座椅原理_你知道吗|当前时讯
全球今热点:大量安卓用户逃离换iPhone:Android 13保有量不足15%
世界观速讯丨70万买红旗电动车 2年内修10次!车主退车遭拒:已修好无法退
劝学译文翻译_劝学译文
下水10秒即可感染 钻进皮肤体内生长!南京疾控提醒预防血吸虫病
世界简讯:1.2万元拍下单颗荔枝 男子:要送给女友
神速!这类品种再迎新成员,两大公募巨头助阵,对应ETF规模超870亿元_天天报资讯
焦点快看:男子路遇纸片鸟 一查竟是国保动物黄苇鳽:性格机警
QQ音乐豪华绿钻续费价格上调:连续包年158元 你续费吗?
速看:正版cd碟专卖店价格(正版cd碟专卖店)
微控制器实时操作系统实践1实时系统介绍 每日聚焦
全球消息!linux 性能自我学习 ———— cpu 快速定位问题 [六]
苹果语音助手功能将重大升级:Hey Siri成历史
3分钟回顾神十五航天员返回全程:遇上绝美日出朝霞
林峰交往过的女朋友(林峰女朋友)
MES系统初探(一)|世界最资讯
【环球财经】美国总统拜登签署债务上限法案
丰田反对电动车:建议别反对|环球观速讯
平均年龄最大的航天员乘组“落地” 神舟十五号载人飞行任务圆满成功 焦点快播
三星全球首款8K电竞显示器8月上市:用上TCL华星国产高端57英寸屏-世界今日讯
天天日报丨中国战舰果敢拦阻穿越台湾海峡的美国和加拿大海军舰艇
存储价格被国产干碎 大厂密谋涨价:2TB该抄底了
【全球播资讯】最多领1600元!北京发放新一批消费券:手机、电脑等都能用
《蜘蛛侠:纵横宇宙》票房超预期_当前热文
地图的三要素有哪些?_地图的三要素是什么 _3分
俄罗斯呼吁本国iPhone用户彻查手机 存在后门:苹果回应永远不会
【天天聚看点】太空出差186天!神十五乘组返回地球:成功着陆
今年前4个月沈阳市快递业务收入25.67亿元 环球时讯
新能源汽修人才缺口或达80%:汽修学员走出校门就进厂-焦点短讯
环球观焦点:苹果和安卓厂商为何都放弃了小屏市场?幕后原因揭晓
苹果头显来了:难成下一个“iPhone”
4个月卖1751.5亿 彩票盯上年轻人?专家提醒不能靠彩票发财 中奖率低
上海长兴岛房价最新走势_上海长兴岛房价
多彩网安入选第三届贵州省网络安全应急技术支撑单位
世界热讯:智齿是什么意思?_智齿是什么意思
焦点热议:致远的意思解释词语(致远的意思)
焦点速递!3099元起 vivo S17 Pro下周首销:影像比肩高端旗舰
网易云盘的歌怎样分享_网易云盘
环球简讯:神舟十五号载人飞船撤离空间站
每日视点!向安卓看齐!iOS 17下周发:开放第三方应用商店
天天热资讯!一年跌价超95% 只花38元华为P50 Pro秒变5G手机
环球观热点:上海两车“斗气” 致一车骑跨高架栏:专家喊话司机要跳出吃亏思维 吃亏是福
环球动态:高中毕业给朋友的留言(朋友给我留言说1601是什么意思)