65.9K
CodeProject 正在变化。 阅读更多。
Home

什么是 AutoMapper?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (22投票s)

2015年4月28日

CPOL

2分钟阅读

viewsIcon

47426

这篇文章解释了在 C# 和 MVC 项目中使用 Automapper 的必要性。

目录

什么是 Automapper?

Automapper 是一个简单可重用的组件,它可以帮助你将数据从一种对象类型复制到另一种对象类型。如果你想获取 automapper,请阅读本文。

例如,下面是一个加载了一些虚拟数据的简单 employee 类。

class Employee 
{
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public decimal Salary { get; set; }
}
// Loaded with some data
Employee emp = new Employee();
emp.FirstName = "Shiv";
emp.LastName = "Koirala";
emp.Salary = 100;

现在假设我们想将上述 employee 数据加载到名为“Person”的类对象中。

class Person
{
        public string FirstName { get; set; }
        public string LastName { get; set; }
}

因此,通常情况下,开发人员最终会编写如下所示的映射代码。

Person per = new Person();
per.FirstName = emp.FirstName;
per.LastName = emp.LastName;

乍一看,这似乎不是什么大问题,但等等……想想,如果你想一遍又一遍地使用这段映射代码会怎样。

因此,作为最佳实践,你希望将这段映射代码集中化,并一遍又一遍地重用这段映射代码。 这就是我们的超级英雄“AutoMapper”来拯救你的地方。“Automapper”像一座桥梁一样位于这两个对象之间,并映射两个对象的属性数据。

使用 Automapper 是一个两步过程

  • 创建 Map
  • 使用 Map,以便对象可以通信。
Mapper.CreateMap<Employee, Person>(); // Create Map
Person per =  Mapper.Map<Employee, Person>(emp); // Use the map

我没有指定映射。它是如何工作的?

在上面的例子中,两个类的属性名称相同,因此映射会自动发生。

如何在 Automapper 中映射不同的属性名称?

如果类具有不同的属性名称,那么我们需要使用“ForMember”函数来指定映射。

Mapper.CreateMap<Employee, Person>()
.ForMember(dest => dest.FName , opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LName , opt => opt.MapFrom(src => src.LastName));

你能给出 Automapper 使用的实际场景吗?

  • 当你在像 MVC 这样的项目中将数据从 ViewModel 移动到 Model 时。
  • 当你在 DTO 和 Model 或实体对象之间移动数据时,反之亦然。

从哪里获取 AutoMapper?

最简单的方法是使用 nugget。 如果你对 nuget 还不熟悉,请观看此 YouTube 视频。

或者,你可以从他们的主站点 http://automapper.org/ 下载该组件。

另请参阅以下关于 C# Automapper 使用的视频

进一步阅读,请观看下面的面试准备视频和分步视频系列。

© . All rights reserved.