AutoMapper是一个能自动完成对象与对象之间转化的开源库;安装方式:使用vs自带的nuget管理工具,搜索AutoMapper,选择安装到你的项目即可。
通常DTO(DataTransferObject数据传输对象)与Model之间的常规转化做法会使代码相当的冗长,AutoMapper作者为了减少这种工作量,写了这个开源库,使DTO与Model之间能够自动的完成转化。
基础使用方法:
publicclassDTO{publicstringuserName{set;get;}publicstringage{set;get;}publicstringjob{set;get;}}publicclassModel{publicstringuserName{set;get;}publicstringage{set;get;}publicstringjob{set;get;}}
上述的DTO与Model,一般情况下,Model为直接映射数据库中的数据,与数据库的字段是一致的。DTO为交互数据,表示在网络上传输的数据,是要暴露给消费者的,为演示方便上述两者对象字段名称是一样的,实际可以不一样。那么如何把两者对象里的数据进行映射呢?
通常的做法为:
//DTO与Model之间可以这样转化,因为的对象的属性都为string类型=;=;=;
使用AutoMapper转化:
//首先需要先为DTO与Model之间定义一个映射关系,DTO();//从数据库取出数据ModelmodelData=GetdtoDataFromDB();//转化为交互的数据DTOdtoData=,DTO(modelData);//也可以这样写:DTOdtoData=(modelData);
这里的Model对象就被AutoMapper自动转化成了DTO对象,所以modelData中的userName、age、job的值即为GetdtoDataFromDB()方法取出来的值。
在实际的项目中使用AutoMapper对DTO与Model进行自动转化的时候遇到了一个坑点,其实也不算是坑点,只是一个我没有注意到的地方,这里做一个记录,加深自己的印象。DTO与Model的结构如下:
//DTOpublicclassDTO{publicstringuserName{set;get;}publicstringage{set;get;}publicstringjob{set;get;}publicAddressDTOaddress{set;get;}}publicclassAddressDTO{publicstringcountry{set;get;}publicstringprovince{set;get;}}//ModelpublicclassModel{publicstringuserName{set;get;}publicstringage{set;get;}publicstringjob{set;get;}publicAddressModeladdress{set;get;}}publicclassAddressModel{publicstringcountry{set;get;}publicstringprovince{set;get;}}
类似与这样的对应的涵盖子实体的我们在写法上面需要修订就需要再添加上子对象的映射
,Model(),AddressModel();//子对象映射关系DTOdtoData=GetdtoDataFromDB();ModelmodelData=,Model(dtoData);
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。