AutoMapper在MVC中的运用05-映射中的忽略、处理null、多种映射转换
本篇AutoMapper使用场景:
※ 动态实现接口方法或属性
※ 目标中的属性如果比源多,可以忽略多出的属性
※ 目标有virtual属性,可忽略
※ 目标属性值为null的解决办法
※ int转string
※ bool转string
※ DateTime转String
※ 判断条件
动态实现接口方法或属性
public interface ICreateOrderMessage
{
string CustomerName { get; set; }
}
□ 使用
public ActionResult Dynamic()
{
var order = new {CustomerName = "darren"};
var message = Mapper.DynamicMap<ICreateOrderMessage>(order);
//message中会有CustomerName属性和值
return View(message);
}
□ 要点
传入的实现类或匿名类,动态实现接口方法或属性。
目标中的属性如果比源多,可以忽略多出的属性
□ View model
public class Order3Dto
{
public decimal Amount { get; set; }
}
□ Domain model
public class Order3
{
public int Id { get; set; }
public decimal Amount { get; set; }
}
□ 映射配置
Mapper.CreateMap<Order3Dto, Order3>()
.ForMember("Id", opt => opt.Ignore());
□ 使用
public ActionResult To()
{
var orderDto = new Order3Dto() {Amount = 50m};
//源没有的属性,预先赋值
var order = new Order3() {Id = 4};
Mapper.Map(orderDto, order);
return View(order);
}
□ 要点
如果目标的属性多于源中的属性,并且不赋值,会报错。
目标有virtual属性,可忽略
□ View model
public class UserInfoViewModel
{
public int ID { get; set; }
public string LoginName { get; set; }
}
□ Domain model
public class UserInfo
{
public UserInfo()
{
this.R_UserInfoActionInfo = new HashSet<R_UserInfoActionInfo>();
}
public int ID { get; set; }
public string LoginName { get; set; }
public DateTime SubTime { get; set; } //目标中多出的属性
public virtual ICollection<R_UserInfoActionInfo> R_UserInfoActionInfo { get; set; } //目标中多出的属性,且是virtual
}
public class R_UserInfoActionInfo
{
public string Name { get; set; }
}
□ 映射配置
Mapper.CreateMap<UserInfoViewModel, UserInfo>()
.ForMember("SubTime", opt => opt.Ignore())
.ForMember("R_UserInfoActionInfo", opt => opt.Ignore());
□ 使用
public ActionResult Concern()
{
UserInfoViewModel vmodel = new UserInfoViewModel()
{
LoginName = "Darren"
};
UserInfo dmodel = Mapper.Map<UserInfoViewModel, UserInfo>(vmodel);
dmodel.SubTime = DateTime.Now; //多出的属性虽然在映射配置中忽略了,但还是可以赋值
return View(dmodel);
}
目标属性值为null的解决办法
.ForMember(dto => dto.AuthorBio, opt => opt.NullSubstitute("Not set yet."))
int转string
.ForMember(dto => dto.NumberOfPosts, opt => {
opt.AddFormatter<NumberOfPostsFormatter>();
})
public class NumberOfPostsFormatter : IValueFormatter
{
public string FormatValue(ResolutionContext context)
{
int value = (int)context.SourceValue;
if(value = 1)
return "Number of Posts: One post";
return "Number of posts:" + value;
}
}
bool转string
.ForMember(dto => dto.VIP, m => m.ResolveUsing<VIPResolver>().FromMember(x => x.VIP))
public class VIPResolver : ValueResolver<bool, string>
{
protected override string ResolveCore(bool source)
{
return source ? "Y" : "N";
}
}
DateTime转String
.ForMember(dto => dto.DateOfBirth, m => m.AddFormatter<DateFormatter>());
public class DateFormatter : IValueFormatter
{
public string FormatValue(ResolutionContext context)
{
return ((DateTime)context.SourceValue).ToLongDateString();
}
}
判断条件
Mapper.CreateMap<AutoMapperInMvc01.Portal.Models.Foo, AutoMapperInMvc01.Portal.Models.Bar>()
.ForMember("baz", opt => opt.Condition(context => context.SourceValue.ToString() == "0"));
AutoMapper在MVC中的运用05-映射中的忽略、处理null、多种映射转换的更多相关文章
- AutoMapper在MVC中的运用01-配置、使用、单元测试、举例
MVC中,如果想在Domain Model和View Model之间建立映射,用AutoMapper是一个不错的选择.不仅如此,AutoMapper能在不同对象之间建立映射,比如string与int类 ...
- AutoMapper在MVC中的运用07-映射在订单场景的例子
本文参考了Taswar Bhatti的博客,他写了<Instant AutoMapper>这本书.遗憾的是,这本电子版书在国内还买不到,也下载不到.也只能从他的有限几篇博文中来窥探一二了. ...
- [asp.net mvc 奇淫巧技] 05 - 扩展ScriptBundle,支持混淆加密javascript
一.需求: 在web开发中,经常会处理javascript的一些问题,其中就包括js的压缩,合并,发布版本以及混淆加密等等问题.在asp.net 开发中我们使用ScriptBundle已经可以解决ja ...
- MVC与MVVM之间在IOS中的区别
作为一个iOS开发者,我不止一次听到我的一些开发者朋友跟我说我写的iOS代码看起来好舒服,很整洁,为什么咱们iOS开发的相当一大部分应用软件都给人以美的享受,究竟是什么使得iOS上的应用可以如此漂亮? ...
- 集合映射中的映射列表(使用xml文件)
如果持久化类具有List对象,我们可以通过映射文件中的类的<list>元素或注释来映射List. 在这里,我们正在使用论坛的场景,其中一个问题有多个答案. 在这里,我们使用论坛的场景,其中 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11 TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...
- ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 对于Mybatis在C#.Net中个人使用的总结(一) Mybatis 的结果映射
(图片中的文字上传之后就都看不清,我再图片的下边会用斜体字标清) 首先我在项目中使用Mybatis 是用XML完成映射的.至于XML这门语言,其实很简单的(对于入门来说,因为我是刚入门哈~),如果你还 ...
- MVC中处理Json和JS中处理Json对象
MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...
随机推荐
- Linux6.5 安装Python3.X(转载)
1.获取Python 3.6.3 通过官网https://www.python.org/downloads/下载Python 3.4.3源码: 源码获取命令如下:wget https://www.py ...
- JS windows.open打开窗口并居中
function openWin() { var url='Add.aspx'; //转向网页的地址; ...
- Android方法引用数超过65535优雅解决
随着应用不断迭代更新,业务线的扩展,应用越来越大(比如:集成了各种第三方SDK或者公共开源的Library文件.jar文件)这样一来,项目耦合性就很高,重复作用的类就越来越多了,SO:问题就来了.相信 ...
- KNN算法的感受 1
本来预计的打算是一天一个十大挖掘算法,然而由于同时要兼顾数据结构面试的事情,所以 很难办到,但至少在回家前要把数据挖掘十大算法看完,过个好年,在course上学习老吴的课程还是帮了我很大的忙,虽然浪费 ...
- Java基础84 javaBean规范
1.javaBean的概述 1.javaBeam(咖啡豆)是一种开发规范,也可以说是一种技术. 2.JavaBean就是一个普通java类,只要符合以下规定才能称作为javaBean: ...
- SURF 特征匹配
参考:http://www.cnblogs.com/ronny/p/4045979.html,博主对源码进行了分析,不过很多没看明白. 分为几个部分.积分图:借助积分图像,图像与高斯二阶微分模板的滤波 ...
- nGrinder的安装与使用
背景 性能压测工具之前使用的是jmeter,这次说的是nGrinder,先直接搬运两者之间的比较 比较点 JMeter nGrinder 结果 实现语言 Java Java = License Apa ...
- RSS新手必读
当谷歌停止Google Reader后,我开始玩RSS Reader了.网上大抵说Google Reader的退出很可惜,不过替代品还是存在的. 作为一个newbie我的视野或许很局限不过还是说几 ...
- IDEA下利用Jrebel插件实现JFinal项目main方法【热加载】
IDEA下利用Jrebel插件实现JFinal项目main方法[热加载] Jrebel破解办法 https://github.com/ilanyu/ReverseProxy/releases/tag/ ...
- List集合去除重复对象及equals()、hashCode()方法的作用
原文:https://blog.csdn.net/freelander_j/article/details/52211010 在java中,要将一个集合中重复的对象除去,如果这个集合中的数据类型是基本 ...