博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
automapper如何全局配置map条件过滤null值空值对所有映射起效
阅读量:6910 次
发布时间:2019-06-27

本文共 1451 字,大约阅读时间需要 4 分钟。

原文

我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我们的实体类。在给用户编辑的时候,我们可能某些字段在数据库中为Null,这时候需要一些默认值 比如这里UserDto中的BirTime,然后我们有一些人的习惯是在构造函数里面进行赋值

public class User { public int Id { get; set; } public string Name { get; set; } public DateTime? BirTime{ get; set; } } public class UserDto { public UserDto() { this.BirTime=DateTime.Now;//把当前时间赋值给BirTime } public string Name { get; set; } public DateTime? BirTime{ get; set; } } //假设我们从数据库中取出来的值是这样的,然后我们要和UserDto之间进行转换 User user = new User() { Id = 1, Name = "caoyc", BirTime=null }; UserDto userDto=user.MapTo
();//这里把实体类转换成前台给用户展示的UserDto类

看似这里的代码都没有什么问题,但是我想在BirTime为null值的时候使用我UserDto类中的默认值 也就是当前时间,但在实际操作之后就会发现转换过后的UserDto的值已经变掉了。那么问题来了, 如何才能使用默认值呢。

方法有很多,比如

//第一种方法UserDto userDto=user.MapTo
();//这里把实体类转换成前台给用户展示的UserDto类userDto.BirTime=userDto.BirTime==null?DateTime.Now:userDto.BirTime;

第一种方法就是在自己转换完成之后判断一下,然后重新赋值,用这种方法的话那写构造函数自然就没什么必要了

//第二种方法Mapper.CreateMap
().ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));

第二种方法不怎么好,当你需要转换的类很多的时候,每个都要这样写,会很多也会很烦

//第三种方法,在全局配置的时候加上这句话private static void CreateMappingsInternal(IMapperConfigurationExpression cfg){     //没错就是这句话 cfg.ForAllMaps((a, b) => b.ForAllMembers(opt => opt.Condition((src, dest, sourceMember) => sourceMember != null))); }

个人比较推荐第三种方法,不过这就相当于一棒子打死了,有利也有弊。

作者:邵佳楠
链接:https://www.jianshu.com/p/c691a20adf2b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
你可能感兴趣的文章
Java学习——何为JNDI
查看>>
Android IOS WebRTC 音视频开发总结(六二)-- 大数据解密国外实时通讯行业开发现状...
查看>>
CSharpGL(11)用C#直接编写GLSL程序
查看>>
openvas
查看>>
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
查看>>
消息推送技术
查看>>
flume 自己定义 hbase sink 类
查看>>
组织目标与个人目标
查看>>
Educational Codeforces Round 8 E. Zbazi in Zeydabad 树状数组
查看>>
自己主动下载源代码_并编译_打包_部署_重新启动服务的Shell脚本
查看>>
常思己过 如切如磋
查看>>
Android中使用Handler造成内存泄露的分析和解决
查看>>
《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现
查看>>
ArrayList与LinkedList区别
查看>>
Linux 学习之路:认识shell和bash
查看>>
POJ 3041(最小点覆盖)
查看>>
Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
查看>>
Custom Accessories
查看>>
【转】xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
查看>>
DirectX 3D 之C#开发
查看>>