使用AutoMapper在两个对象列表之间进行映射
本文关键字:列表 对象 之间 映射 两个 AutoMapper 使用 | 更新日期: 2023-09-27 18:15:47
我使用AutoMapper
来映射我的域模型和视图模型,反之亦然。
我通常在控制器中这样做映射:
// Mapping
Tutorial tutorial = (Tutorial)tutorialMapper.Map(viewModel, typeof(TutorialEditViewModel), typeof(Tutorial));
我的教程映射器类来处理上面的:
public class TutorialMapper : ITutorialMapper
{
static TutorialMapper()
{
Mapper.CreateMap<TutorialCreateViewModel, Tutorial>();
Mapper.CreateMap<TutorialEditViewModel, Tutorial>();
Mapper.CreateMap<Tutorial, TutorialEditViewModel>();
}
public object Map(object source, Type sourceType, Type destinationType)
{
return Mapper.Map(source, sourceType, destinationType);
}
}
我正试图缩短列表之间的映射方式。我现在是这样做的:
IEnumerable<Tutorial> tutorialsList = tutorialService.GetAll();
IEnumerable<TutorialListViewModel> tutorialListViewModels =
from t in tutorialsList
orderby t.Name
select new TutorialListViewModel
{
Id = t.Id,
Name = t.Name,
IsActive = t.IsActive
};
有可能像这样映射它吗?
我知道AutoMapper支持列表映射,但是我该如何在我的场景中实现它呢?
我还尝试了以下操作:
IEnumerable<Tutorial> tutorialsList = tutorialService.GetAll();
IEnumerable<TutorialListViewModel> tutorialListViewModels = (IEnumerable<TutorialListViewModel>)tutorialMapper.Map(tutorialsList, typeof(IEnumerable<Tutorial>), typeof(IEnumerable<TutorialListViewModel>));
但是如果在tutorialsList中没有项目,那么我得到以下错误:
{"The entity type Tutorial is not part of the model for the current context."}
也许你可以试试这样做:
public ViewResult Index()
{
IList<City> cities = db.Cities.ToList();
IList<CityViewModel> viewModelList = Mapper.Map<IList<City>, IList<CityViewModel>>(cities);
return View(viewModelList);
}
我从未在我的上下文文件中定义我的教程实体集。