【发布时间】:2018-06-17 06:03:07
【问题描述】:
我正在使用通用方法使用 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 的新手。我需要一些帮助来了解我哪里出错了或者需要在我的通用方法中添加/修复什么,以便将子列表对象与父对象一起复制到。
更新 -
目前我正在使用以下代码进行此操作,并且它工作正常,但我很困惑这是正确的做法。
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);
【问题讨论】:
-
您的配置需要包含有关如何从
StudentQualificationValueObject映射到QualificationViewModel的定义。否则它不知道如何转换这些类型,但你不需要为集合定义转换,只为类型本身定义。 -
请看我的更新。
标签: c# asp.net-mvc asp.net-mvc-5 automapper-6