AutoMapper 自动映射工具
先引用对应的DLL.
11.转换匿名对象 结合LINQ映射新的实体类.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//1.普通转换
Name name1 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.BeforeMap((name, nameDto) => Console.WriteLine("hello world before"))
.AfterMap((name, nameDto) => Console.WriteLine("hello world after"));
NameDto nameDto1 = Mapper.Map<Name, NameDto>(name1);
Console.WriteLine("1");
Console.WriteLine(nameDto1.FirstName + nameDto1.LastName);
Console.WriteLine();
//Console.ReadKey();
//整体设置
//2.整体即时转换
Mapper.Reset();
Name name2 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ConstructUsing(name => new NameDto() { AllName = name.FirstName + name.LastName });
NameDto nameDto2 = Mapper.Map<Name, NameDto>(name2);
Console.WriteLine("2");
Console.WriteLine(nameDto2.AllName);
Console.WriteLine();
//Console.ReadKey();
//3.整体通过TypeConverter类型转换
Mapper.Reset();
Name name3 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ConvertUsing<NameConverter>();
NameDto nameDto3 = Mapper.Map<Name, NameDto>(name3);
Console.WriteLine("3");
Console.WriteLine(nameDto3.AllName);
Console.WriteLine();
//Console.ReadKey();
//单属性设置
//4.属性条件转换
Mapper.Reset();
Name name4 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.FirstName, opt => opt.Condition(name => !name.FirstName.Equals("l", StringComparison.OrdinalIgnoreCase)));
NameDto nameDto4 = Mapper.Map<Name, NameDto>(name4);
Console.WriteLine("4");
Console.WriteLine(string.IsNullOrEmpty(nameDto4.FirstName));
Console.WriteLine();
//Console.ReadKey();
//5.属性忽略
Mapper.Reset();
Name name5 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.FirstName, opt => opt.Ignore());
NameDto nameDto5 = Mapper.Map<Name, NameDto>(name5);
Console.WriteLine("5");
Console.WriteLine(string.IsNullOrEmpty(nameDto5.FirstName));
Console.WriteLine();
//Console.ReadKey();
//6.属性转换
Mapper.Reset();
Name name6 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.AllName, opt => opt.MapFrom(name => name.FirstName + name.LastName));
NameDto nameDto6 = Mapper.Map<Name, NameDto>(name6);
Console.WriteLine("6");
Console.WriteLine(nameDto6.AllName);
Console.WriteLine();
//Console.ReadKey();
//7.属性通过ValueResolver转换
Mapper.Reset();
Name name7 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, StoreDto>()
.ForMember(storeDto => storeDto.Name, opt => opt.ResolveUsing<NameResolver>());
StoreDto store1 = Mapper.Map<Name, StoreDto>(name7);
Console.WriteLine("7");
Console.WriteLine(store1.Name.FirstName + store1.Name.LastName);
Console.WriteLine();
//Console.ReadKey();
//8.属性填充固定值
Mapper.Reset();
Name name8 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.AllName, opt => opt.UseValue<string>("ljzforever"));
NameDto nameDto8 = Mapper.Map<Name, NameDto>(name8);
Console.WriteLine("8");
Console.WriteLine(nameDto8.AllName);
Console.WriteLine();
//Console.ReadKey();
//9.属性格式化
Mapper.Reset();
Name name9 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.FirstName, opt => opt.AddFormatter<StringFormatter>());
NameDto nameDto9 = Mapper.Map<Name, NameDto>(name9);
Console.WriteLine("9");
Console.WriteLine(nameDto9.FirstName);
Console.WriteLine();
//Console.ReadKey();
//10.属性null时的默认值
Mapper.Reset();
Name name10 = new Name() { FirstName = "L" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.LastName, opt => opt.NullSubstitute("jz"));
NameDto nameDto10 = Mapper.Map<Name, NameDto>(name10);
Console.WriteLine("10");
Console.WriteLine(nameDto10.LastName);
Console.WriteLine();
//Console.ReadKey();
//其它设置与特性
//11.转换匿名对象
Mapper.Reset();
object name11 = new { FirstName = "L", LastName = "jz" };
NameDto nameDto11 = Mapper.DynamicMap<NameDto>(name11);
Console.WriteLine("11");
Console.WriteLine(nameDto11.FirstName + nameDto11.LastName);
Console.WriteLine();
//Console.ReadKey();
//12.转换DataTable
Mapper.Reset();
DataTable dt = new DataTable();
dt.Columns.Add("FirstName", typeof(string));
dt.Columns.Add("LastName", typeof(string));
dt.Rows.Add("L", "jz");
List<NameDto> nameDto12 = Mapper.DynamicMap<IDataReader, List<NameDto>>(dt.CreateDataReader());
Console.WriteLine("12");
Console.WriteLine(nameDto12[0].FirstName + nameDto12[0].LastName);
Console.WriteLine();
//Console.ReadKey();
//emitMapper error
//List<NameDto> nameDto20 = EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<IDataReader, List<NameDto>>().Map(dt.CreateDataReader());
//13.转化存在的对象
Mapper.Reset();
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.LastName, opt => opt.Ignore());
Name name13 = new Name() { FirstName = "L" };
NameDto nameDto13 = new NameDto() { LastName = "jz" };
Mapper.Map<Name, NameDto>(name13, nameDto13);
//nameDto13 = Mapper.Map<Name, NameDto>(name13);//注意,必需使用上面的写法,不然nameDto13对象的LastName属性会被覆盖
Console.WriteLine("13");
Console.WriteLine(nameDto13.FirstName + nameDto13.LastName);
Console.WriteLine();
//Console.ReadKey();
//14.Flatten特性
Mapper.Reset();
Mapper.CreateMap<Store, FlattenName>();
Store store2 = new Store() { Name = new Name() { FirstName = "L", LastName = "jz" } };
FlattenName nameDto14 = Mapper.Map<Store, FlattenName>(store2);
Console.WriteLine("14");
Console.WriteLine(nameDto14.NameFirstname + nameDto14.NameLastName);
Console.WriteLine();
//Console.ReadKey();
//15.将Dictionary转化为对象,现在还不支持
Mapper.Reset();
Mapper.CreateMap<Dictionary<string, object>, Name>();
Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("FirstName", "L");
//Name name15 = Mapper.DynamicMap<Dictionary<string, object>, Name>(dict);
Name name15 = Mapper.Map<Dictionary<string, object>, Name>(dict);
Console.WriteLine("15");
Console.WriteLine(name15.FirstName);
Console.WriteLine();
Console.ReadKey();
}
}
public class Store
{
public Name Name { get; set; }
public int Age { get; set; }
}
public class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class StoreDto
{
public NameDto Name { get; set; }
public int Age { get; set; }
}
public class NameDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string AllName { get; set; }
}
public class FlattenName
{
public string NameFirstname { get; set; }
public string NameLastName { get; set; }
}
public class NameConverter : TypeConverter<Name, NameDto>
{
protected override NameDto ConvertCore(Name source)
{
return new NameDto() { AllName = source.FirstName + source.LastName };
}
}
public class NameResolver : ValueResolver<Name, NameDto>
{
protected override NameDto ResolveCore(Name source)
{
return new NameDto() { FirstName = source.FirstName, LastName = source.LastName };
}
}
public class NameFormatter : ValueFormatter<NameDto>
{
protected override string FormatValueCore(NameDto name)
{
return name.FirstName + name.LastName;
}
}
public class StringFormatter : ValueFormatter<string>
{
protected override string FormatValueCore(string name)
{
return name + "-";
}
}
}
AutoMapper 自动映射工具的更多相关文章
- AutoMapper自动映射
十年河东,十年河西,莫欺少年穷. 学无止境,精益求精. 不扯犊子,直接进入正题: AutoMapper自动映射常用于EF中,能很好的解决DTO和Model之间相互映射的问题.在未使用AutoMappe ...
- .NET之AutoMapper对象映射工具运用
AutoMapper对象映射工具:主要是将某一个实体转成另一个实体. 1.引用NuGet包;搜索:AutoMapper 2.创建实体类 using System; using System.Colle ...
- EmitMapper自动映射工具
在实体与DTO之间,我们一般都需要进行映射.如果手动的来进行转换,实在是太麻烦.所以就产生了很多映射工具,比如AutoMapper,EmitMapper.而经过一些对比,EmitMa ...
- EF架构~AutoMapper对象映射工具简化了实体赋值的过程
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...
- automapper 自动映射 集成asp.net Core2.1
学习博文:https://www.cnblogs.com/yan7/p/8085410.html 1.使用nuget 安装 <PackageReference Include="Aut ...
- Asp.NetCore 3.1 使用AutoMapper自动映射转换实体 DTO,Data2ViewModel
1:什么是AutoMapper? 下面为AutoMapper官方的解释: AutoMapper是一个对象-对象映射器.对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作. 使Aut ...
- 使用SpringDataJdbc的@Query注解实现自动映射结果集 ----- RowMapper接口
使用@Query注解的时候,常常需要写sql来映射非域类的实例,通常的做法就是 实现 RowMapper接口,然后new实例一个一个的设置值进去...为此.出世了自动映射工具类 注意事项:此抽象类只是 ...
- .NET的DTO映射工具AutoMapper
.NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...
- .NET的对象映射工具AutoMapper使用笔记
AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...
随机推荐
- maven创建spring项目之后,启动报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade
错误: org.apache.catalina.core.StandardContext listenerStart严重: Error configuring application listener ...
- 下载PhpStorm并进行激活
1.首先登陆PhpStorm官网http://www.jetbrains.com/phpstorm/ 点击附图中的download now 按钮 2.第二步根据os x \wind\ linux进行下 ...
- 自定义按钮~自适应布局~常见bug
一.元件 自定义按钮可用button或a display为 inline-block 方便设置格式,通过 padding,height,line-height,font-size设置按钮的大小 & ...
- 【第六篇】Volley之https相关
Volley之https信任所有证书实现: public class HttpsTrustManager implements X509TrustManager { private static Tr ...
- HDU 2601 An easy problem
(i+1)*(j+1)=n+1 转换成上面这个式子,也就是问n+1的因子有几个 #include<cstdio> #include<cstring> #include<c ...
- 第七十六节,css颜色和透明度,盒子阴影和轮廓,光标样式
css颜色和透明度,盒子阴影和轮廓,光标样式 学习要点: 1.颜色和透明度 2.盒子阴影和轮廓 3.光标样式 一.颜色和透明度 颜色我们之前其实已经用的很多了,比如字体颜色.背景颜色.边框颜色.但除了 ...
- Jbpm工作流表补数记录
一: 历史数据表 11. JBPM4_HIST_ACTINST 流程活动(节点)实例表 存放Activity Instance的历史记录 12. JBPM4_HIST_DETAIL 流程历史详细 ...
- 有关下行HARQ的一切
1. 对于下行HARQ,有几种类型的下行传输需要UE反馈ACK/NACK 动态调度的下行传输:UE收到一个使用C-RNTI或TC-RNTI(对应随机接入过程中的Msg4)加扰的PDCCH和PDSCH, ...
- [ An Ac a Day ^_^ ] CodeForces 586C Gennady the Dentist 模拟
题意: n个小朋友去拔牙 每个小朋友在拔牙的时候会哭 哭声是vi分贝 距离门口vi远的小朋友听到了哭声会害怕 他们的勇气值p会减少d 如果勇气值p小于等于零 他们就会在门外哭并立即离开拔牙队列(回家找 ...
- digitalocean vpn安装配置教程
digitalocean是美国一家专业的vps提供商,优势是性价比高,最低配置512MB内存vps每月只要5美元,导致大陆用户疯狂涌入.关于digitalocean申请方法.digitalocean速 ...