AutoMapper:创建包含类的映射

本文关键字:映射 包含类 创建 AutoMapper | 更新日期: 2023-09-27 18:24:06

我有这两个视图模型:

public class SettingsViewModel
{
    public string UserId { get; set; }
    public PersonalViewModel Personal { get; set; }
}
public class PersonalViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

在实现这些视图模型后,我用automapper创建了一个地图:

    Mapper.CreateMap<User, PersonalViewModel>()
        .ForMember(vm => vm.Birthday, m => m.MapFrom(
            u => (u.Birthday.HasValue) ? u.Birthday.Value.ToString("dd.MM.yyyy") : DateTime.Now.ToString("dd.MM.yyyy")));
    Mapper.CreateMap<User, SettingsViewModel>()
        .ForMember(vm => vm.UserId, m => m.MapFrom(
            u => u.Id));
    var viewModel = Mapper.Map<User, SettingsViewModel>(user);

现在我有一个问题,我的SettingsViewModel中的属性Personal为null。如何组合我的两个映射?如何使用用户对象中的数据填充Personal属性?在我的用户对象中,有FirstNameLastName的属性。

AutoMapper:创建包含类的映射

您可以这样设置映射:

Mapper.CreateMap<User, SettingsViewModel>()
    .ForMember(vm => vm.UserId, m => m.MapFrom(u => u.Id))
    .ForMember(vm => vm.Personal, opt => opt.MapFrom(u => u));

这里,我们说User对象本身映射Personal属性指定此选项时,User的映射→将自动使用PersonalViewModel

示例:https://dotnetfiddle.net/YJnPDq