AutoMapper用于映射子列表对象

时间:2018-06-17 06:03:07

标签: c# asp.net-mvc asp.net-mvc-5 automapper-6

我使用通用方法使用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.cs映射StudentValueObject.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);

1 个答案:

答案 0 :(得分:0)

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

varchar
相关问题