在web项目的开发中,一般会遇到一个问题:那就是Entity实体的属性与前端界面需要的属性不能匹配。可能多一两个属性,也可能少一两个属性,这个时候就需要一个东西(DTO:数据传输对象),以及辅助工具:AutoMapper。
DTO:数据传输对象,应用在Entity实体与前端界面的展示问题。在前端需要的属性数据少而Entity属性数据多的时候,我们不可能将整个Entity都传进前端界面但是又不取(不取为何要传?),也不能将所需要的数据通过键值对的方式进行一次次的传递,这个时候,我们就需要DTO,用于封装需要传输的数据,并将所需要的信息不多不少的传入前端。
AutoMapper:用于辅助属性数据在DTO和Entity之间的转换,你总不会想自己一个一个取再一个一个转吧?
AutoMapper的使用,看代码:
//Entity实体,省略setter和getter;
public class Article
{
public string Title;
public string Content;
public string Author;
public DateTime PostTime;
public string Remark;
}
//DTO,省略setter和getter
public class ArticleDTO
{
public string ArticleID;
public string Title;
public string Summary;
public string Content;
public string Author;
public DateTime PostTime;
public int PostYear;
public string Remark;
}
public static void Main(string[] args)
{
Article article = new Article
{
Title = "DTO及AutoMapper的使用",
Content = "内容",
Author = "fengwuJ",
PostTime = DateTime.Now,
Remark = "文章备注"
};
//配置AutoMapper
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<Article, ArticleDTO>()//创建映射
.ForMember(dest => dest.ArticleID, opt => opt.MapFrom(src => src.Id))//指定映射规则
.ForMember(dest => dest.Summary, opt => opt.MapFrom(src => src.Content))//指定映射规则
.ForMember(dest => dest.PostYear, opt => opt.MapFrom(src => src.PostTime.Year))//指定映射规则
.ForMember(dest => dest.Remark, opt => opt.Ignore());//指定映射规则 忽视没有的属性
});
//调用映射
ArticleDTO form = AutoMapper.Mapper.Map<Article, ArticleDTO>(article);
}