在线医疗平台开发实战04-AutoMapper使用及无法引用问题解决
2016-09-13 21:04
591 查看
AutoMapper基本使用
在《在线医疗平台开发实战02-项目架构设计》中,因为ORM使用StackService.Ormlite使用CodeFirst开发,我们在项目中新增了DTO这一层用来自动创建数据库结构和作为数据库操作的实体,这样DTO和Model这一层经常需要转换。举一个简单例子,用户在DTO中定义为:
/// <summary> /// 用户DTO /// </summary> public class UserDTO { [AutoIncrement] public int Id { get; set; } /// <summary> /// 用户名 /// </summary> public string Name { get; set; } /// <summary> /// 密码 /// </summary> public string Password { get; set; } /// <summary> /// 用户角色 /// 0:用户, 1 :医院, 2:管理员 /// </summary> public int RoleId { get; set; } }
用户在Model中定义为:
public class User { public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } }
那么将
UserDTO转换为
User,我们需要在项目中这样来完成(这种转换在Service层中经常会发生,从数据库中获取数据对象为DTO,为了在WebSite中能使用我们要转换成Model):
public User Login(string name,string pwd) { //从dal层获取UserDTO var usrDTO= dal.Get(name, pwd); //将DTO转换为Model,返回 var usr=new User() { Id=usrDTO.Id, Name=usrDTO.Name, Password=usrDTO.Password }; return usr; }
从代码中可以看出这种转换很枯燥乏味,两个实体之间的属性是否自动进行转换呢?AutoMapper就是用来解决这个问题。
引入AutoMapper之后,代码可以这样来写:
using AutoMapper; …… public User Login(string name,string pwd) { var usrDTO= dal.Get(name, pwd); //UserDTO和User自动映射 var rtv= Mapper.Map<User>(usrDTO); return rtv; }
为了让DTO和Model对象自动映射,需要先进行模型之间对应关系的配置,在项目中我们定义一个注册方法,用来集中管理模型之间的匹配关系:
/// <summary> /// 公共服务 /// </summary> public class CommonService { /// <summary> /// 注册映射管理 /// </summary> public static void RegisterMap() { Mapper.Initialize(cnf => { cnf.CreateMap<UserDTO, User>(); }); } }
然后在项目启动时,调用注册映射管理的方法,就可以在项目的任何地方,使用
Mapper.Map<T>方法进行自动转换了。
在
Global.asax文件中Application_Start方法中调用:
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { …… //注册 CommonService.RegisterMap(); } }
AutoMapper 引用及问题解决
在项目中使用Nuget命令安装AutoMapper:Install-Package AutoMapper
但是执行命令时却出现问题:
![](http://blog.zhishile.com/Uploads/Images/2016-08-21/c326f7fc-34eb-4276-9968-2ceae64cdf53.png)
从提示信息看应该是安装
AutoMapper时有引用
NETSandard.Library这个库,但是引用不上导致安装失败。
登陆到AutoMapper在Nuget.org上的官方主页:https://www.nuget.org/packages/AutoMapper/ 可以看出在.NetFramework
4.5版本是不需要任何依赖的。
![](http://blog.zhishile.com/Uploads/Images/2016-08-21/e68f0e71-e917-4738-ba84-fd10e1aaafc3.png)
而我们的项目目标框架就是.Net Framework 4.5。
![](http://blog.zhishile.com/Uploads/Images/2016-08-21/e4ae7391-6b5d-4a8c-b789-dd427672ab9e.png)
所以会不会是Nuget在安装时出现问题,这让我意识到Nuget插件已经有好久没升级了,是不是没有升级导致的解析错误,于是在VS中工具->扩展和更新对Nuget进行升级。
![](http://blog.zhishile.com/Uploads/Images/2016-08-21/9509f219-e068-45ca-89ee-27e9b5c92b5e.png)
升级之后再次安装,没有报前面的错误,但是依然无法添加引用,我想是
AutoMapper 5.1.1这个最新版应该是在打包时出现了问题导致无法正确识别目标平台,于是决定安装
AutoMapper 5.0.2,安装成功。
![](http://blog.zhishile.com/Uploads/Images/2016-08-21/62de564f-126a-4bee-9353-38c6fd2cd240.png)
AutoMapper 5.0.2在基本用法上和
AutoMapper 5.1.1并没有多大区别,等安装包再次更新修复之后再更新引用吧
相关文章推荐
- Android studio 读源码技巧
- Android *** transition不起作用
- 欢迎关注本人的微信公众号
- AutoMapper类型转换设置详解
- 欢迎关注本人的微信公众号
- 欢迎关注本人的微信公众号
- 关于广播机制BroadcastReceiver
- Android图片压缩技术
- Unity中Time.deltaTime的使用
- Cocos2dx 布景类-Layer
- mob AndroidStudio 短信SDK集成
- 处于不同栈Activity之间的启动与数据传递
- Android系统篇之----Binder机制和远程服务调用机制分析
- android通知对话框、多选对话框、单选对话框
- Unity3D 世界坐标上一个点对应UI上一个点
- Object 对象方法 hasOwnProperty()
- 简单的android系统设置界面实现
- android 自定义view_圆形进度条
- Android异步加载数据--Loader
- Android中Java 与 JavaScript交互