AutoMapper扩展
扩展类:AutoMapExtention
using System;
using System.Collections.Generic;
using System.Linq.Expressions; namespace AutoMapper.Extention
{
public static class AutoMapExtention
{
/// <summary>
/// 类型映射
/// </summary>
/// <typeparam name="F">From</typeparam>
/// <typeparam name="T">To</typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static T MapTo<F, T>(this F source,
Func<Dictionary<Expression<Func<T, object>>, Action<IMemberConfigurationExpression<F>>>> mapRuleSets = null,
bool ignoreNull = false)
where T : class
where F : class
{
if (source == null) { return default(T); }
var m = Mapper.CreateMap<F, T>();
if (ignoreNull)
{
m.ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));
}
if (mapRuleSets != null)
{
var arr = mapRuleSets();
foreach (var item in arr)
{
m.ForMember(item.Key, item.Value);
}
}
return Mapper.Map<T>(source);
} /// <summary>
/// 集合映射
/// </summary>
/// <typeparam name="F"></typeparam>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="defaultValueSets">默认值</param>
/// <param name="mapRuleSets">映射规则</param>
/// <returns></returns>
public static List<T> MapTo<F, T>(this IEnumerable<F> source,
Func<Dictionary<Expression<Func<T, object>>, Action<IMemberConfigurationExpression<F>>>> mapRuleSets = null,
bool ignoreNull = false)
where T : class
where F : class
{
if (source == null) { return new List<T> { }; }
var m = Mapper.CreateMap<F, T>();
if (ignoreNull)
{
m.ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));
}
if (mapRuleSets != null)
{
var arr = mapRuleSets();
foreach (var item in arr)
{
m.ForMember(item.Key, item.Value);
}
}
return Mapper.Map<List<T>>(source);
}
}
}
实体模型:
using System; namespace UnitTests.Model.OOMapper
{
public class User
{
public Guid ID { get; set; }
public int? SerialNumber { get; set; }
public string RealName { get; set; }
public bool Sex { get; set; }
}
}
using System; namespace UnitTests.Model.OOMapper
{
public partial class UserDTO
{
public Guid ID { get; set; }
public int? SerialNumber { get; set; }
public string RealName { get; set; }
public bool Sex { get; set; }
}
}
测试
using Microsoft.VisualStudio.TestTools.UnitTesting;
using AutoMapper.Extention;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnitTests.Model.OOMapper;
using System.Linq.Expressions;
using AutoMapper; namespace UnitTests.Tests
{
[TestClass()]
public class OOMapperTests
{
[TestMethod()]
public void MapToTest()
{
var user = new User()
{
ID = Guid.NewGuid(),
Sex = true,
RealName = "陈楚生",
SerialNumber =
};
//单体映射
var userDTO = user.MapTo<User, UserDTO>(() =>
{
var rules = new Dictionary<Expression<Func<UserDTO, object>>, Action<IMemberConfigurationExpression<User>>>();
rules.Add(dst => dst.RealName, opt => opt.MapFrom(src => string.Format("Hello,{0}", src.RealName)));
return rules;
});
//集合映射
List<User> users = new List<User>() { user };
var userDTOs = users.MapTo<User, UserDTO>(() =>
{
var rules = new Dictionary<Expression<Func<UserDTO, object>>, Action<IMemberConfigurationExpression<User>>>();
rules.Add(dst => dst.RealName, opt => opt.MapFrom(src => string.Format("Hello,{0}", src.RealName)));
return rules;
});
Assert.IsTrue(user.ID == userDTO.ID && users.Count == userDTOs.Count);
}
}
}
AutoMapper扩展的更多相关文章
- AutoMapper扩展帮助类
/// <summary> /// AutoMapper扩展帮助类 /// </summary> public static class AutoMapperExtension ...
- Automapper扩展方法
问题描述 系统中实现了一个自定义的PagedList /// <summary> /// Paged list interface /// </summary> public ...
- Abp.AutoMapper扩展(1) --static class AutoMapExtensions
// 摘要: // Converts an object to another using AutoMapper library. Creates a new object ...
- Asp.net 面向接口可扩展框架之使用“类型转化基础服务”测试四种Mapper(AutoMapper、EmitMapper、NLiteMapper及TinyMapper)
Asp.net 面向接口可扩展框架的“类型转化基础服务”是我认为除了“核心容器”之外最为重要的组成部分 但是前面博文一出,争议很多,为此我再写一篇类型转化基础服务和各种Mapper结合的例子,顺便对各 ...
- EF架构~对AutoMapper实体映射的扩展
回到目录 AutoMapper在之前我曾经介绍过,今天主要是把它作一下扩展,因为它的调用太麻烦了,呵呵,扩展之后,用着还可以,感觉.net3.5之后,有了扩展方法这个东西,在程序开发速度及表现力上都有 ...
- AutoMapper 6.x 扩展方法
简介 很多时候我们使用AutoMapper的时候,都需要进行一个配置才可以使用Mapper.Map<Source,Target>(entity);.如果不进行配置则会报错. 如果实体过多, ...
- 从我做起[AutoMapper实现模块化注册自定义扩展MapTo<>()].Net Core 之二
AutoMapper实现模块化注册自定义扩展MapTo<>() 我们都知道AutoMapper是使用的最多的实体模型映射,如果没有AutoMapper做对象映射那么我们需要想一下是怎么写的 ...
- AutoMapper随笔记
平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html#skill 先看效果:(完整Demo:https://git ...
- 让AutoMapper在你的项目里飞一会儿(转)
出处:http://www.cnblogs.com/WeiGe/p/3835523.html 先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说 ...
随机推荐
- Acadia Lab 203 + Lab 231
在做完 Lab 6 之后,惊觉选做实验缺口很大,于是遍历了一遍夏任务,找到了一条最省力的路线. 做完 Lab 6 的连线不用拆,可以接下来做以下两个实验: Lab 203 网络时钟 核心代码如下: v ...
- MongoDB释放磁盘空间
1. 先删除旧的文档db.remove({}): 2. 从副本集中移除待清理的成员: (1) 登录副本集中的 Primary 服务器(/opt/mongo1/bin/mongo --port 2701 ...
- AspNet MVC与T4,我定制的视图模板
一. 遇到的问题 文章开头部分想先说一下自己的困惑,在用AspNet MVC时,完成Action的编写,然后添加一个视图,这个时候弹出一个添加视图的选项窗口,如下: 很熟悉吧,继续上面说的,我添加一个 ...
- FastJSON 使用
FastJSON是一个Java语言编写的高性能,功能完善,完全支持http://json.org的标准的JSON库.多了不说了,百度一下一大把. 在此,简单的总结一下自己用过,测试过的方法. 如果使用 ...
- 转载:centos7下使用yum安装mysql
转自:http://www.cnblogs.com/hwd-cnblogs/p/5213337.html CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql ...
- 9×9扫雷游戏代码-C写的
#include <stdio.h> #include <stdlib.h> //画棋盘 a雷表 b周围雷数表 c打开表 ][],][],][]) { ,j=; ;i<; ...
- java : 包装类 缓冲机制的使用(转载)
摘要: 八种基本数据类型和其包装类中 Integer valueOf(int i).Byte valueOf(byte b).Short valueOf(short s).Long valueOf(l ...
- let it be
回家路上听到电台里主持人在介绍这首歌,听得我两眼模糊,真的太应最近的心情了. let it be.
- Codeforce 370J Bottles(动态规划-01背包)
题目链接:http://codeforces.com/problemset/problem/730/J 题目大意:有n个杯子, 每个杯子有两个值一个是已装水量,一个是可装水量.从一个杯子向另一个杯子倒 ...
- Linux下调试程序方法
您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问 ...