EmitMapper系列之二:EmitMapper的使用小结
2024-09-20 05:47:45
EmitMapper的入门
EmitMapper引用
EmitMapper案例
最近公司开发项目前端使用一个js框架,后端使用ef,js前台读取的json采用实体的dto来进行生成。
在网上看到了EmitMapper相对其他映射框架处理速度可以更快,就拿来用了。下面是代码中常用的几个块。
1.普通的映射。
public class UserInfo
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
} public class UserInfoDTO
{
public string name { get; set; }
public string address { get; set; }
} var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>();
UserInfoDTO userdto = mapper.Map(user);
2.有外键关联,需要映射出外键所带名字
public class UserInfo
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; } public Teacher teacher { get; set; }
}
public class Teacher
{
public int id { get; set; }
public string name { get; set; }
}
public class UserInfoDTO
{
public int id { get; set; }
public string name { get; set; }
public string teacher { get; set; }
} var user = new UserInfo {
id = 12,
name = "张三",
address = "北京",
teacher = new Teacher {
id = 11,
name = "王五"
}
}; var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
new DefaultMapConfig()
.ConvertUsing<Teacher, string>(t => t.name)
);
UserInfoDTO userdto = mapper.Map(user);
3.两个实体之间名字不一致,需要映射。
public class UserInfo
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
}
public class UserInfoDTO
{
public int id { get; set; }
public string name { get; set; }
public string userAddress { get; set; }
}
var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
new DefaultMapConfig()
.MatchMembers((x, y) =>
{
if (x == "address" && y == "userAddress")
{
return true;
}
return x == y;
})
);
UserInfoDTO userdto = mapper.Map(user);
4.需要对某一个字段进行特殊处理
public class UserInfo
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
}
public class UserInfoDTO
{
public string id { get; set; }
public string name { get; set; }
public string userAddress { get; set; }
public string userJson { get; set; }
}
var user = new UserInfo {
id = 12,
name = "张三",
address = "北京"
}; var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
new DefaultMapConfig()
.PostProcess<UserInfoDTO>((value, state) =>
{
//在id编号前加上今年的年份
value.id = DateTime.Now.ToString("yyyy") + value.id;
//实体的json格式
value.userJson = "{\"id\":\"" + value.id + "\",\"name\":\"" + value.name + "\"}";
return value;
})
);
UserInfoDTO userdto = mapper.Map(user);
5.忽略掉某个字段的映射
public class UserInfo
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
}
public class UserInfoDTO
{
public string id { get; set; }
public string name { get; set; }
public string address { get; set; }
}
var user = new UserInfo {
id = 12,
name = "张三",
address = "北京"
}; var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
new DefaultMapConfig()
.IgnoreMembers<UserInfo, UserInfoDTO>(new string[] { "name" })
);
UserInfoDTO userdto = mapper.Map(user);
6.给空元素赋默认值
public class UserInfo
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
public DateTime? godate { get; set; }
}
public class UserInfoDTO
{
public string id { get; set; }
public string name { get; set; }
public string address { get; set; }
public DateTime godate { get; set; }
}
var user = new UserInfo {
id = 12,
name = "张三",
address = null,
godate = null
}; var mapper = ObjectMapperManager.DefaultInstance.GetMapper<UserInfo, UserInfoDTO>(
new DefaultMapConfig()
//如果日期为空设置为当前时间
.NullSubstitution<DateTime?, DateTime>((value) => DateTime.Now)
//如果string类型为null赋值为“”
.NullSubstitution<string, string>((value) => "")
);
UserInfoDTO userdto = mapper.Map(user);
常用的就上面几点,对于更深入的。有待以后研究。。。。。
本篇文章引用:园友(Arik lee) 的 http://www.cnblogs.com/ariklee/p/3833598.html,总结相对比较全
最新文章
- stm32GPIO的速度是什么意思
- iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
- .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)
- PoEdu - C++阶段班【Po学校】- 第3天
- ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)
- C#中的ODBC、OLEDB连接
- C语言之分配
- iOS 多线程学习笔记 —— NSOperation
- 【SignalR学习系列】8. SignalR Hubs Api 详解(.Net C# 客户端)
- @@ITENTITY
- Maven项目pom.xml文件简单解析
- poj3669 Meteor Shower(预处理+bfs)
- tomact的安装配置
- [Oracle]PDB Clone 方法
- (原)MobileNetV2
- Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”
- sql 一对多查询最近一条
- c++多继承浅析
- 使用Array类处理基本数组对象
- 解析oracle对select加锁的方法以及锁的查询 转
热门文章
- spring cloud 配置纲要Properties
- axios基于常见业务场景的二次封装
- docker pure-ftp 搭建ftp服务器
- HDU3613 Best Reward —— Manacher算法 / 扩展KMP + 枚举
- iOS字符串的各种用法(字符串插入、字符串覆盖、字符串截取、分割字符串)
- HDU - 1874 畅通工程续(最短路径)
- hdu 3336 Count the string(next数组)
- 杂项:ASP.NET Core
- bzoj3302
- 任务31:课时介绍 &; 任务32:Cookie-based认证介绍 &;任务33:34课 :AccountController复制过来没有移除[Authorize]标签