项目中用到了DTO与Model之间的转换,因为model项目比较多,所以需要使用工具或者代码来实现快速的转换。AutoMapper就是一个很好的基于约定的object-object mapper.映射器。

Map规则:

AutoMapper默认是根据实体的属性名称来一一对应映射,你也可以手动的设置Map规则。

接下来举个栗子:

一、默认属性Map (DTO => Model)

准备实体

 namespace MapDemo
{
using System;
using System.Collections.Generic; public partial class Service
{
public Service()
{
this.ServiceDtl = new HashSet<ServiceDtl>();
} public int Id { get; set; }
public string Name { get; set; }
public Nullable<decimal> Price { get; set; } public virtual ICollection<ServiceDtl> ServiceDtl { get; set; } }
}
 namespace MapDemo
{
using System;
using System.Collections.Generic; public partial class ServiceDtl
{
public int DtlId { get; set; }
public string DtlName { get; set; }
public Nullable<int> Id { get; set; } public virtual Service Service { get; set; }
}
}

准备Model

 namespace MapDemo.Model
{
class ServiceModel
{
public int Id { get; set; }
public string Name { get; set; }
public Nullable<decimal> Price { get; set; } public virtual ICollection<ServiceDtl> ServiceDtl { get; set; } }
}
 namespace MapDemo.Model
{
class ServiceDtlModel
{
public int DtlId { get; set; }
public string DtlName { get; set; }
public Nullable<int> Id { get; set; } public virtual Service Service { get; set; }
}
}

Mapper初始化:

Mapper.Initialize(cfg =>
{
  cfg.CreateMap<Service, ServiceModel>();
});

二、单表Map

var  serviceModel= Mapper.Map<ServiceModel>(service);

三、多表多层指定Map

Mapper.Initialize(cfg =>
{
cfg.CreateMap<Service, ServiceModel>().ForMember(d => d.ServiceDtl, opt => opt.MapFrom(s => s.ServiceDtl));
cfg.CreateMap<ServiceDtl, ServiceDtlModel>();
}); var serviceModel= Mapper.Map<ServiceModel>(service);

这样service中就包含了ServiceDtl的项目,操作DB的时候进行反向Map,只需要操作主表,适用于多层表结构的操作,方便快捷,代码量少。

四、Model与Model之间Map

创建一个类似ServiceModel的模型CYService

 namespace MapDemo.Model
{
class CYService
{ public int Id { get; set; }
public string Name { get; set; }
public Nullable<decimal> Price { get; set; } }
}
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Service, CYService>();
});
var cyService = Mapper.Map<CYService>(newItem);

 

简单总结一下:

AutoMapper对于多表的层级操作十分方便,并且易于扩展。

但是项目中不建议直接使用Mapper.Map(),建议使用局部的mapEngine.Map()避免全局Map的影响。

具体参照官方解释:http://automapper.readthedocs.io/en/latest/index.html

说说AutoMapper那些事的更多相关文章

  1. 【道德经】漫谈实体、对象、DTO及AutoMapper的使用

    写在前面 实体和值对象 实体和对象 故常无欲以观其妙,常有欲以观其徼 初始实体和演化实体 代码中的DTO AutoMapper实体转换 后记 实体(Entity).对象(Object).DTO(Dat ...

  2. 结婚虽易,终老不易:EntityFramework和AutoMapper的婚后生活

    写在前面 我到底是什么? 越界的可怕 做好自己 后记 上一篇<恋爱虽易,相处不易:当EntityFramework爱上AutoMapper>文章的最后提到,虽然AutoMapper为了En ...

  3. C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用

    前言:前篇搭建了下WCF的代码,就提到了DTO的概念,对于为什么要有这么一个DTO的对象,上章可能对于这点不太详尽,在此不厌其烦再来提提它的作用: 从安全上面考虑,领域Model都带有领域业务,让Cl ...

  4. AutoMapper Getting started

    AutoMapper 是什么? 为什么要用AutoMapper? 如何使用AutoMapper? 在什么地方配置AutoMapper? 如何测试my mappings? AutoMapper 是什么? ...

  5. DTO学习系列之AutoMapper(六)----EntityFramework和AutoMapper的婚后生活

    写在前面 我到底是什么? 越界的可怕 做好自己 后记 文章标题主要关键字:mapping DTOs to Entities,注意并不是“Entities to DTOs”,表示实体对象到DTO的转换, ...

  6. DTO学习系列之AutoMapper(一)

    一.前言 DTO(Data Transfer Object)数据传输对象,注意关键字“数据”两个字,并不是对象传输对象(Object Transfer Object),所以只是传输数据,并不包含领域业 ...

  7. .NET的DTO映射工具AutoMapper

    .NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...

  8. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)

    前言 Hi,大家好,我是Rector 时间飞逝,一个星期又过去了,今天还是星期五,Rector在图享网继续跟大家分享系列文本:一步一步创建ASP.NET MVC5程序[Repository+Autof ...

  9. 使用.Net Core Mvc +SqlSugar +Autofac+AutoMapper+....

    开源地址:https://github.com/AjuPrince/Aju.Carefree 目前用到了 SqlSugar.Dapper.Autofac.AutoMapper.Swagger.Redi ...

随机推荐

  1. Restful api 返回值重复的问题

    Spring boot全家桶前后端分离的项目,在扩充某一个列表形式的返回值时,发现返回值出现了一批的重复. 正常的数据返回: 数值完全一致只是参数名称区分了大小写,如下图: 推测可能是restful格 ...

  2. PHP基础之输出缓冲区基本概念、原理分析

    一.概念 在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了.或者PHP运行完毕.或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数据的区域称为PH ...

  3. org.w3c.dom document 和xml 字符串 互转

    转自:https://blog.csdn.net/wmyasw/article/details/8686420 package com.mymhotel.opera; import java.io.F ...

  4. apk反编译工具包for Mac OS的使用

    在本文中我将介绍如何在Mac OS X上使用apktool.jar.dex2jar.jd-gui来进行apk的反编译和查看源码.下面会提供每个工具的下载地址. 测试环境:OS X EI Capitan ...

  5. springboot启动后执行一段代码的方式

    文章转载自: https://www.cnblogs.com/zuidongfeng/p/9926471.html https://blog.csdn.net/zknxx/article/detail ...

  6. SQLSEVER导出 xml文件

    各种都可以参照: 链接:https://wenku.baidu.com/view/778f794bfe4733687e21aa90.html 怎样把SQL Server里的某个表的数据导出成XML文件 ...

  7. 更新yum源并重建缓存

    原文连接 1)下载wget yum install -y wget 2)备份默认的yum mv /etc/yum.repos.d /etc/yum.repos.d.backup 3)设置新的yum目录 ...

  8. [daily][archlinux] pacman 安装软件时404的问题

    时常,我们在archlinux上pacman安装一个软件时,会遇见如图这样的问题: “The requested URL returned error: 404”  [classic_tong @ 2 ...

  9. ICS2019-Linux汇编实验指导

    ICS2019-Linux汇编实验指导 环境配好了? 开始调试 一. 首先安装NASM 1. 先判断系统是否已经安装了nasm 打开终端,执行  whereis nasm :如果显示nasm: /us ...

  10. Immediate Decodability UVA-644(qsort排序 + 模拟)

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...