使用 automapper 映射模型而不是 foreach 语句

Posted

技术标签:

【中文标题】使用 automapper 映射模型而不是 foreach 语句【英文标题】:use automapper to map models instead of foreach statement 【发布时间】:2022-01-01 02:11:13 【问题描述】:
public class Car

    public int Id get;set;        
    public string Name get;set;
    public Owner OwnerData get;set


public class Owner

    public int Id get;set;
    public string Name get;set;
    public string Phone get;set;
    public string CarName get;set;
      

Owner ownerData = repository.Get<Owner>(id);
IEnumerable<Car> cars = repository.Get<Car>();

// 映射collection car中的所有对象并设置OwnerData

    var data = new List<Car>();
    foreach(var car in cars) //replace this with automapper
    
       car.OwnerData = new Owner
       
          CarName = ownerData.CarName,
          Name = ownerData.Name,
          Phone = ownerData.Phone
       ;

       data.Add(car);
       

如何利用 automapper 并用 automapper 替换整个 foreach(遍历整个汽车集合并设置 Owner 数据?

【问题讨论】:

这能回答你的问题吗? Mapping Lists using Automapper 【参考方案1】:

首先,您应该将AutoMapper.Extensions.Microsoft.DependencyInjection NuGet 包添加到您的项目中。 之后创建一个名为AutoMapperProfiles 的类并从Profile 继承它。

public class AutoMapperProfiles : Profile

    /// <summary>
    /// Create mapping configuration from one type to another type
    /// </summary>
    public AutoMapperProfiles()
    
        Car oCar = new Car();
        CreateMap<oCar.OwnerData, Owner>();
        CreateMap<Owner, oCar.OwnerData>();
    

然后在 Startup.cs 类上配置 AutoMapper。

services.AddAutoMapper(typeof(AutoMapperProfiles).Assembly);

您应该将IMapper 注入您的方法中。这里我使用了构造函数注入

private readonly IMapper _mapper;

/// <summary>
/// Inject Generic Repository and IMapper Service to the controller
/// </summary>
/// <param name="mapper"></param>
public YourConstructor(IMapper mapper)

    _mapper = mapper;

那你就可以这样使用了。

Car oCar = new Car();
var data = _mapper.Map<List<oCar.OwnerData>>(cars);

使用这种方法的好处是DI(依赖注入)

希望这会奏效。

【讨论】:

以上是关于使用 automapper 映射模型而不是 foreach 语句的主要内容,如果未能解决你的问题,请参考以下文章

[使用Automapper时,我是否也应该展平/映射视图模型的内部objetc?

AutoMapper 根据其他模型属性值映射所有属性

如何使用automapper映射与多个表的数据集

0.AutoMapper

如何使用AutoMapper创建复杂的映射?

C# automapper 嵌套对象条件映射