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)就是数据传输对象,说 ...
随机推荐
- 将C#datagridview控件的数据导出到Excel中
1.添加引用Microsoft.Office.Interop.Excel. 2.程序代码引用using Excel = Microsoft.Office.Interop.Excel; 3.控件事件代码 ...
- wpf 遮住输入法 问题
可以参考这个代码 http://www.cnblogs.com/Leaco/p/3164394.html 当你发现没用的时候 可以改这句代码 var hwnd = ((HwndSource)Pr ...
- nginx支持pathinfo并且隐藏index.php
How To Set Nginx Support PATHINFO URL Model And Hide The /index.php/ 就像这样 The URL before setting lik ...
- MongoDB数据导入导出成csv或者json
1. 从远程数据表拉取数据到本地json文件 mongoexport --host 远程服务器IP --port 远程服务器端口 --username 远程数据库用户名 --password 远程数据 ...
- JavaScript 随笔2 面向对象 原型链 继承
第六章 面向对象的程序设计 1.创建对象的几种方式 A)工厂模式 function CreatObj(name,sex,age){ this.name=name; this.sex=sex; this ...
- 调用JavaScript
当webdriver 遇到没法完成的操作时,笔者可以考虑借用JavaScript 来完成,比下下面的例子,通过JavaScript 来隐藏页面上的元素.除了完成webdriver 无法完成的操作,如果 ...
- h5 摄像头处理 在线视频
http://www.360doc.com/content/08/0812/03/72059_1533104.shtml http://html5online.com.cn/articles/2012 ...
- Windows 10通过本地镜像离线安装.NET 3.5
在Windows10中,当我们安装某些软件的时候会提示"你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)",由于 ...
- Symmetric Difference
function sym(args) { //return args; var arr = []; for(var i = 0; i < arguments.length; i++){ arr. ...
- 苗子sale record
2016年7月11日 橘白/阳光 发广州 220 中通 719373064939 成功2016年7月11日 横纹RA 发潮州 250 中通 719373064940 成功2016年7月18日 ...