tnblog
首页
视频
资源
登录

映射AutoMapper

6119人阅读 2019/10/28 16:14 总访问:3467638 评论:2 收藏:0 手机
分类: .net后台框架

前言 DTO与AutoMapper

DTO


DTO是个什么东东?


DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已。


为什么要用DTO?


1、DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层


2、DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的解耦,因此改动领域Model不会影响UI层


3、DTO说白了就是数据而已,不包含任何的业务逻辑,属于瘦身型的对象,使用时可以根据不同的UI需求进行灵活的运用


AutoMapper


现在我们既然知道了使用DTO的好处,那么我们肯定也想马上使用它,但是这里会牵扯一个问题:怎样实现DTO和领域Model之间的转换?


有两个思路,我们要么自己写转换代码,要么使用工具。


不过就应用而言,我还是觉得用工具比较简单快捷,那就使用工具吧。


其实这样的转换工具很多,不过我还是决定使用AutoMapper,因为它足够轻量级,而且也非常流行,国外的大牛们都使用它。


使用AutoMapper可以很方便的实现DTO和领域Model之间的转换,它是一个强大的Object-Object Mapping工具。


1.安装AutoMapper


安装完成后

资源映射文件为(把对应的LastModified属性改成UpdateTime):

Code:

  1. public class PostResource
  2. {
  3.     public int Id { getset; }
  4.     public string Title { getset; }
  5.     public string Body { getset; }
  6.     public string Author { getset; }
  7.     public DateTime UpdateTime { getset; }
  8.     public string Remark { getset; }
  9. }

源EF实体模型为:

Code:

  1. public class PostEntity
  2. {
  3.     public string Title { getset; }
  4.     public string Body { getset; }
  5.     public string Author { getset; }
  6.     public DateTime LastModified { getset; }
  7.     public string Remark { getset; }
  8. }

Entity中包含Id字段


2.创建映射类


  1. public MappingProfile:Profile
  2. {
  3.     public MappingProfile()
  4.     {
  5.         //时间改个名
  6.         CreateMap<Post, PostResource>()
  7.             .ForMember(dest => dest.UpdateTime,opt=>opt.MapFrom(src=>src.LastModified));
  8.     
  9.         CreateMap<PostResource,Post>();
  10.     }
  11. }


3.注册映射服务


注册AutoMapper

  1. services.AddAutoMapper(Assembly.GetAssembly(typeof(Program)));

Startup.cs类中ConfigureServices方法中

  1. app.UseMyExceptionHandler(loggerFactory);


4.控制器配置

  1. [HttpGet]
  2. public async Task<IActionResult> Get(PostParameters postParameters)
  3. {
  4.     var posts = await _PostRepository.GetAllPosts();
  5.     var postResources = _mapper.Map<IEnumerable<Post>, IEnumerable<PostResource>>(posts);
  6.     return Ok(postResources);
  7. }

3.结果

我们可以看见输出的LastModified字段已经被改成了UpdateTime





欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

剑轩

2019/10/28 22:04:02

好是好,这个对效率影响大不大哇,效率高不高

尘叶心繁:@剑轩比起数据多大规模的遍历一遍应该还是框架好用一些

2019/10/29 11:17:48 回复

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

扩展ef自动映射需要查询的字段(表达式树Expression),动态构建返回值

Entity Framework 动态构造select表达式比如我们需要返回某些字段会采用如下的写法但是发现每次都去写select如果字段很多不...

.NET CORE 中使用AutoMapper进行对象映射

AutoMapper基于约定的对象-对象映射器。AutoMapper使用流畅的配置API定义对象-对象映射策略。AutoMapper使用基于约定的匹配...

EF实体类指定部分属性不映射成数据库字段

在想要不映射的字段上加上[NotMapped]标记即可[NotMapped] publicstringStatus{get;set;}

AutoMapper映射自定义类型

AutoMapper映射自定义类型[TOC]枚举 public class UserState : Enumeration { public static readonly UserState ...

servlet 映射的方式 6

一、创建Javaweb项目,继承HttpServlet抽象类二、在web.xml的配置1、第一种前端的访问2、第二种前端的访问3、第三种前端的...

servlet 多映射的使用场景 7

一、创建Javaweb项目,继承HttpServlet抽象类二、在web.xml的配置三、部署到tomcat。。。。。。四、启动。。。。。。五、访...

servlet 3.0 手动创建容器(即手动创建servlet的申明与映射) 2

1-2、3、创建一个实现ServletConttainerInitializer接口的类4-6、a:创建META-INF包b:在包下再创包c:创建文件7、8、在实现...

获取请求参数并封装对象(映射封装) 5

续写至jaWeb下的获取请求参数并封装对象(手动封装) 4篇一、新增功能类二、修改功能类的逻辑1、2、三、修改页面提交路径四...

ABP 自动映射 AutoMapper

转载:https://www.cnblogs.com/sugarwxx/p/13298800.html自动映射有如下几种:AutoMap,AutoMapFrom和AutoMapTo1.AutoMap...

Mapster Adapt扩展方法自动映射

前言记录工作中的经验首先下载Mapster的包简单使用模拟两个实体publicclassUser {publicstringName{get;set;} publicintA...

ef core code first 忽略映射数据库字段NotMapped

ef core code first 忽略映射数据库字段非常简单使用NotMapped特性即可。 [NotMapped] public string Status { get; set;...

AutoMapper配置映射关系。AutoMapper 配置子对象的情况,配置对象里边还有对象的情况

如果字段名字不一样,可以这样配置映射关系 CreateMap&lt;LandInfo, LandInfoDto&gt;().ForMember(dest =&gt; dest._remar...

请求-请求映射 03

一、1、格式2、用法:在类上加上该映射请求后,它的页面返回地址也会改变,有两种方式改变页面注意:这两种方式不能同时用...

docker 容器的名字和取的名称不一样,端口也没有映射

很有可能是你运行容器的时候,名字前面多了一个空格。如下所示,所以容器的名字和取的名称不一样 docker run --name= myap...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术