使用AutoMapper在2个对象列表之间进行映射

时间:2011-11-25 09:26:18

标签: c# asp.net-mvc-3 c#-4.0 automapper

我使用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."}

2 个答案:

答案 0 :(得分:1)

也许你可以尝试这样的事情:

public ViewResult Index()
    {
        IList<City> cities = db.Cities.ToList();

        IList<CityViewModel> viewModelList = Mapper.Map<IList<City>, IList<CityViewModel>>(cities);
        return View(viewModelList);
    }

答案 1 :(得分:-5)

我从未在我的上下文文件中定义我的Tutorial实体集。它现在有效。