AutoMapper2
1.嵌套映射
namespace Second
{
class Program
{
static void Main(string[] args)
{
Mapper.CreateMap<OuterSource, OuterDest>();
Mapper.CreateMap<InnerSource, InnerDest>();
Mapper.AssertConfigurationIsValid();
var source = new OuterSource
{
Value = ,
Inner = new InnerSource { OtherValue= }
};
var dest = Mapper.Map<OuterSource, OuterDest>(source);
}
} public class OuterDest
{
public int Value { get; set; }
public InnerDest Inner { get; set; }
} public class InnerDest
{
public int OtherValue { get; set; }
} public class OuterSource
{
public int Value { get; set; }
public InnerSource Inner { get; set; }
}
public class InnerSource
{
public int OtherValue { get; set; }
}
}
2.自定义类型转换
class Program
{
static void Main(string[] args)
{
Mapper.CreateMap<string, int>().ConvertUsing(Convert.ToInt32);
Mapper.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter());
// Mapper.CreateMap<string, DateTime>().ConvertUsing(Convert.ToDateTime);
Mapper.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>();
Mapper.CreateMap<Source, Destination>();
Mapper.AssertConfigurationIsValid();
var source = new Source
{
Value1 = "",
Value2 = "01/01/2000",
Value3 = "AutoMapperSamples.GlobalTypeConverters.GlobalTypeConverters+Destination"
};
var result= Mapper.Map<Source, Destination>(source); }
}
public class DateTimeTypeConverter : ITypeConverter<string,DateTime>
{
public DateTime Convert(ResolutionContext context)
{
return System.Convert.ToDateTime(context.SourceValue);
}
}
public class TypeTypeConverter : ITypeConverter<string, Type>
{
public Type Convert(ResolutionContext context)
{
return context.SourceType;
}
} public class Source
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public string Value3 { get; set; }
}
public class Destination
{
public int Value1 { get; set; }
public DateTime Value2 { get; set; }
public Type Value3 { get; set; }
}
3.自定义值转换
class Program
{
static void Main(string[] args)
{
//Mapper.CreateMap<Source, Destination>()
// .ForMember(a => a.Total, b => b.ResolveUsing<CustomResolver>()); //不使用反射构造CustomResolver
Mapper.CreateMap<Source, Destination>()
.ForMember(opt => opt.Total,
src => src.ResolveUsing<CustomResolver>()
.ConstructedBy(()=>new CustomResolver())); var source = new Source
{
Value1 = ,
Value2 =
}; var result = Mapper.Map<Source, Destination>(source); }
} public class CustomResolver : ValueResolver<Source, int>
{
protected override int ResolveCore(Source source)
{
return source.Value1 + source.Value2;
}
} public class Source
{
public int Value1 { get; set; }
public int Value2 { get; set; }
} public class Destination
{
public int Total { get; set; }
}
4.替代NULL
class Program
{
static void Main(string[] args)
{
Mapper.CreateMap<Source, Dest>()
.ForMember(dest => dest.Value, opt => opt.NullSubstitute("hi"));
var source = new Source { Value=null};
var d = Mapper.Map<Source, Dest>(source); Console.WriteLine(d.Value);//hi
}
} class Source
{
public string Value { get; set; }
} class Dest
{
public string Value { get; set; }
}
5.在map之前或之后进行处理
class Program
{
static void Main(string[] args)
{
//Mapper.CreateMap<Source, Dest>()
// .BeforeMap((src, dest) => src.Value = src.Value + "hh")
// .AfterMap((src,dest)=>dest.Value="glzsk"); Mapper.CreateMap<Source, Dest>(); var a = new Source { Value="A" };
// var b = Mapper.Map<Dest>(a);
var b = Mapper.Map<Source, Dest>(a, opt =>
{
opt.AfterMap((src, dest) => dest.Value = "glzsk");
opt.BeforeMap((src, dest) => src.Value = src.Value + "hh");
}
);
Console.WriteLine(a.Value+"\r\n"+b.Value);
Console.ReadLine();
}
} class Source
{
public string Value { get; set; }
} class Dest
{
public string Value { get; set; }
}
AutoMapper2的更多相关文章
- 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- DTO学习系列之AutoMapper(四)
本篇目录: Mapping Inheritance-映射继承 Queryable Extensions (LINQ)-扩展查询表达式 Configuration-配置 Conditional Mapp ...
- 实现AutoMapper(1.0版本)
最近有个需求就是实体之间自动转换,网上肯定有很多现成的实现,不过还是自己写了一个,就当对java高级特性的一个熟悉的过程.这中间包含了泛型,反射,lamada表达式.对于想了解java高级特性的人来说 ...
- 手动搭建ABP2.1.3 Zero——基础框架
一.基础层搭建 二.PM.Core 三.PM.EntityFramework 四.PM.Application 五.PM.WebApi 六.PM.Web(MPA) 七.PM.Web(SPA) 八.单元 ...
- 手动搭建ABP2.1.3——基础框架
一.基础层搭建 1,创建一个空解决方案 2,层结构 Demo.Core[v:4.6.1]:类库 Demo.EntityFramework[v:4.6.1]:类库(引用Demo.Core) Demo.A ...
- automapper实体中的映射和聚合根中的使用
一,如下例子: using AutoMapper; using System; using System.Collections.Generic; using System.Linq; using S ...
随机推荐
- IDEA 运行 控制台显示一堆乱码,一些问号
如下: 问题: 配置程序运行参数的时候,配置到了"VM options",应该为配置到"Program arguments",如图:
- UI基础视图----UIView总结
UIView是UIKit框架里面最基础的视图类,是UIResponder的子类,是UIApplication和UIViewController的兄弟类,是UIWindow,UILabel,UIImag ...
- C#中的TCP通讯与UDP通讯
最近做了一个项目,主要是给Unity3D和实时数据库做通讯接口.虽然方案一直在变:从开始的UDP通讯变为TCP通讯,然后再变化为UDP通讯;然后通讯的对象又发生改变,由与数据库的驱动进行通讯(主动推送 ...
- ZOJ3557 How Many Sets II( Lucas定理)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud How Many Sets II Time Limit: 2 Seconds ...
- tomcat启动报错总结
错误一 webapps\ROOT does not exist or is not a readable directory 错误原因:在tomcat的server.xml的context中配置了不存 ...
- [Mugeda HTML5技术教程之9]使用元件
元件是一个可以在舞台上实例化和再利用的预先生成的独立动画.一个元件有它自己的时间轴(层,单位等),可以独立显示的动画.元件提高了动画的重用性和灵活性,是个强大的存在.元件可用于创建复杂的动画效果. 所 ...
- QQ联系客服
$('.side').bind('mouseenter mouseleave',function(e){ if(e.type=="mouseenter"){ if(!$(this) ...
- iOS学习之下拉刷新
今天我们来给昨天的Demo加上下拉刷新和上拉加载更多的功能. 1.下拉刷新. 在viewDidLoad中调用方法addRefreshControl,下拉时可以出现风火轮加载更多的效果. - (void ...
- IOC容器MEF在MVC中的使用
最近想把自己的网站框架用IOC改造下,经过对比,我初步选择autofac,虽然MEF不需要配置,但性能不行,autofac虽然需要自己写自动化注入,但性能非常好. 先分析下各大IOC框架的性能,分两类 ...
- Hibernate学习笔记--映射配置文件详解
参考资料: http://blog.163.com/hzd_love/blog/static/13199988120108265317988/ http://www.cnblogs.com/often ...