十年河东,十年河西,莫欺少年穷。
学无止境,精益求精。
不扯犊子,直接进入正题:
AutoMapper自动映射常用于EF中,能很好的解决DTO和Model之间相互映射的问题。在未使用AutoMapper之前,我们回顾下传统的对象相互映射的方法。
首先贴出本节要用到的DTO,学生表及系表,他们之间存在主外键关系!如下:
View Code
假设,现在要求将得到的学生对象转化为Model
新建学生对象Model
传统方法如下:
传统方法实现相互映射存在一个弊端,如果数据表字段特别多,那么,试问你需要写多少行代码?
OK,AutoMapper闪亮登场,那么如果使用AutoMapper需要写什么样的代码呢?
由上述代码可知,其相互映射只需一行代码搞定。这里需要注意,你定义的Model层个字段属性要和DTO层字段属性一致。
OK,那如果需要转化一个泛型集合呢?
那么,AutoMapper是否可以做到呢?
当然,可以...
有上述代码可知,是不是连Foreach都省了?
哈哈,OK,这些都是些基础功能,咱们继续深究。
如果需要映射导航属性对应表中的字段怎么写呢?
我们将StudentModel修改成如下:
首先用传统方法实现如下:
传统方法变化不大,那么,用AutoMapper怎么实现呢?
在这里,我要告诫大家关于使用懒加载的注意事项,如果你不注意,那么你写的代码效率有可能将会非常低。
生成了2条SQL语句:
OK,仅仅生成两条SQL语句还可以接受,但是如果你的项目数据表关系比较复杂,有很多导航属性时,就会生成很多SQL语句,会产生极大的性能问题。
那么关于懒加载的问题怎么解决呢?还好,EF中有Include,在使用Include时需要引入using System.Data.Entity;
将上边的程序修改成如下:
使用Include,其实相当于声明弃用懒加载,这里使用显示加载!
OK,关于使用AutoMapper应用懒加载的方法讲完了。正如上述所说:AutoMapper是将DTO映射成Model,如果反过来映射是否可行呢?
还好,AutoMapper提供了.ReverseMap();方法,将Model映射成DTO,如下:
OK。截止到这里,关于AutoMapper的基础用法也就讲完了,本人能力有限,如有未提及之处,请大家多多指点。希望大家喜欢!
@陈卧龙的博客