您的位置:首页 > 移动开发

在线医疗平台开发实战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

但是执行命令时却出现问题:



从提示信息看应该是安装
AutoMapper
时有引用
NETSandard.Library
这个库,但是引用不上导致安装失败。
登陆到AutoMapper在Nuget.org上的官方主页:https://www.nuget.org/packages/AutoMapper/ 可以看出在.NetFramework
4.5版本是不需要任何依赖的。



而我们的项目目标框架就是.Net Framework 4.5。



所以会不会是Nuget在安装时出现问题,这让我意识到Nuget插件已经有好久没升级了,是不是没有升级导致的解析错误,于是在VS中工具->扩展和更新对Nuget进行升级。



升级之后再次安装,没有报前面的错误,但是依然无法添加引用,我想是
AutoMapper
5.1.1
这个最新版应该是在打包时出现了问题导致无法正确识别目标平台,于是决定安装
AutoMapper
5.0.2
,安装成功。



AutoMapper 5.0.2
在基本用法上和
AutoMapper
5.1.1
并没有多大区别,等安装包再次更新修复之后再更新引用吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: