与autoMapper是在做高效平台项目一开始的时候某某同学极力推荐我看的,看了以后感觉这个东西可真的很好使,下面就分享给大家!
先介绍一下它的产生背景,结合我现在在做的项目来说,这个项目的前台用的是MVC,后台用的是WCF+三层+工厂+反射,看上去很高大上的样纸 ~~,于是开始了冲动的代码之旅,可是在写数据契约的时候发现了EF中生成的实体我用到了可能很多,于是写啊~复制啊~粘贴啊~原以为很霜,全部纯手工打造,可是遇到了AutoMapper,我后悔~莫及~~
在看大神们博客的过程中,发现了一种叫做贫血模型的,其实也就是我们的数据表映射处理出来的实体模型,这种模型只有固定数量的属性,如果你想用多个模型中的属性时,就会山路十八弯了,举个例子
如果把Entity Framework比作机关枪,那实体类的属性就是子弹,每颗子弹只能攻击唯一对应的目标,在射击过程中,只要有一颗子弹攻击的目标不存在,机枪就会卡壳(子弹决定目标?)。这时,Entity Framework成为了一堆废铁。
为什么不由目标决定子弹?出现什么目标,用什么子弹,既节省子弹,又不会卡壳。也就是根据查询结果给对应的实体类属性赋值。难道这个新式武器也有设计缺陷,没有考虑到这样的应用场景?还是我们不会使用?
首先,下载Install-Package AutoMapper
2、下面是我做的一个小例子:要记得添加引用哦!
<span style="font-size:14px;"><strong><span style="color:#ff0000;">using AutoMapper; </span></strong> namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //创建实体映射规则,onclass为源数据契约、TimeTable为目标数据契约 Mapper.CreateMap<OnClass, TimeTable>(); //为源数据赋值 OnClass onclass = new OnClass { OnClassID = "001", OnClassNo = "002", OnClassName = "dandan" }; //将源数据的值映射给目标数据 TimeTable timetable = Mapper.Map<TimeTable>(onclass); //显示 Console.WriteLine(timetable.OnClassID+timetable.OnClassNo+timetable.OnClassName); } } } </span>看一下效果:
简单的AutoMapper介绍完了,有没有感觉到它的巨大作用呢?如果你的EF不能满足你的程序实现,需要调用其他模型时,请考虑它把~