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,总结相对比较全

最新文章

  1. stm32GPIO的速度是什么意思
  2. iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
  3. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)
  4. PoEdu - C++阶段班【Po学校】- 第3天
  5. ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)
  6. C#中的ODBC、OLEDB连接
  7. C语言之分配
  8. iOS 多线程学习笔记 —— NSOperation
  9. 【SignalR学习系列】8. SignalR Hubs Api 详解(.Net C# 客户端)
  10. @@ITENTITY
  11. Maven项目pom.xml文件简单解析
  12. poj3669 Meteor Shower(预处理+bfs)
  13. tomact的安装配置
  14. [Oracle]PDB Clone 方法
  15. (原)MobileNetV2
  16. Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”
  17. sql 一对多查询最近一条
  18. c++多继承浅析
  19. 使用Array类处理基本数组对象
  20. 解析oracle对select加锁的方法以及锁的查询 转

热门文章

  1. spring cloud 配置纲要Properties
  2. axios基于常见业务场景的二次封装
  3. docker pure-ftp 搭建ftp服务器
  4. HDU3613 Best Reward —— Manacher算法 / 扩展KMP + 枚举
  5. iOS字符串的各种用法(字符串插入、字符串覆盖、字符串截取、分割字符串)
  6. HDU - 1874 畅通工程续(最短路径)
  7. hdu 3336 Count the string(next数组)
  8. 杂项:ASP.NET Core
  9. bzoj3302
  10. 任务31:课时介绍 &amp; 任务32:Cookie-based认证介绍 &amp;任务33:34课 :AccountController复制过来没有移除[Authorize]标签