繁体   English   中英

AutoMapper映射子列表对象

[英]AutoMapper to map a child list object

我正在使用通用方法使用Automapper映射两个类

我的通用方法

public class AutoMapperConfiguration
{
    public MapperConfiguration Configure<TSource, TDestination>() where TSource:class where TDestination:class
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile<ClientMappingProfile<TSource,TDestination>>();
        });
        return config;
    }
}

ClientMappingProfile.cs

public class ClientMappingProfile<TSource,TDestination>: Profile where TSource : class where TDestination:class 
{
    public ClientMappingProfile()
    {
        CreateMap<TSource, TDestination>().ReverseMap();
    }
}

StudentDetailsViewModel.cs

public class StudentDetailsViewModel
{
    public long ID { get; set; }
    public string FirstName { get; set; }
    public List<QualificationViewModel> listQualificationViewModel { get; set; }
}

QualificationViewModel.cs

public class QualificationViewModel
{
    public long ID { get; set; }
    public long StudentID { get; set; }
    public string ExaminationPassed { get; set; }
}

StudentValueObject.cs

public class StudentValueObject
{
    public long ID { get; set; }
    public string FirstName { get; set; }
    public List<StudentQualificationValueObject> listStudentQualificationValueObject { get; set; }
}

StudentQualificationValueObject.cs

public class StudentQualificationValueObject
{
    public long ID { get; set; }
    public long StudentID { get; set; }
    public string ExaminationPassed { get; set; }
}

用法

StudentValueObject studentValueObject = new StudentValueObject();
var config = new AutoMapperConfiguration().Configure<StudentValueObject, StudentDetailsViewModel>();
var iMapper = config.CreateMapper();
studentValueObject = iMapper.Map<StudentDetailsViewModel, StudentValueObject>(objStudentModel);

所以,这个工作正常映射StudentDetailsViewModel.csStudentValueObject.cs 但是它无声地无法将我的子列表对象List<QualificationViewModel>复制到List<StudentQualificationValueObject> 子列表对象似乎始终为null 我是AutoMapper的新手。 我需要一些帮助,以了解我在哪里出错或需要在通用方法中添加/修复哪些内容,以便将子列表对象与Parent对象一起复制到其中。

更新 -

目前,我正在使用下面的代码来实现它,并且它可以正常工作,但是我很困惑这是执行此操作的正确方法。

StudentValueObject studentValueObject = new StudentValueObject();
var config = new AutoMapperConfiguration().Configure<StudentValueObject, StudentDetailsViewModel>();
var iMapper = config.CreateMapper();
studentValueObject = iMapper.Map<StudentDetailsViewModel, StudentValueObject>(objStudentModel);
config = new AutoMapperConfiguration().Configure<StudentQualificationValueObject, QualificationViewModel>();
iMapper = config.CreateMapper();
studentValueObject.listStudentQualificationValueObject = iMapper.Map<List<QualificationViewModel>, List<StudentQualificationValueObject>>(objStudentModel.listQualificationViewModel);

您必须映射列表属性,因为它们在给定的父类型中具有不同的名称,并且必须为两个列表中使用的类型添加一个映射。 这是您的代码的有效示例:

public class StudentsMappingProfile : Profile
{
    public StudentsMappingProfile()
    {
        CreateMap<StudentValueObject, StudentDetailsViewModel>()
            .ForMember(viewModel => viewModel.listQualificationViewModel, conf => conf.MapFrom(value => value.listStudentQualificationValueObject));
        CreateMap<StudentQualificationValueObject, QualificationViewModel>();
    }
}

public class Program
{
    public static void Main()
    {
        var config = new MapperConfiguration(cfg => cfg.AddProfile<StudentsMappingProfile>());
        var mapper = config.CreateMapper();

        var source = new StudentValueObject { ID = 73, FirstName = "Hello", listStudentQualificationValueObject = new List<StudentQualificationValueObject> { new StudentQualificationValueObject { ID = 42, StudentID = 17, ExaminationPassed = "World" } } };
        var destination = mapper.Map<StudentDetailsViewModel>(source);

        Console.ReadKey();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM