【问题标题】:mapping complex object with automapper使用自动映射器映射复杂对象
【发布时间】:2013-05-09 18:08:19
【问题描述】:

如何使用此定义将IEnumerable<Category> 转换为IEnumerable<CategoryViewModel>

public class Category
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public DateTime CreationTime { get; set; }

    }

public class CategoryViewModel
{
    public Guid  CategoryId { get; set; }
    public string Name { get; set; }
}

我已经这样做了

public static IEnumerable<CategoryViewModel> ConvertToCategoryViewModelList(this IEnumerable<Category> category)
        {
            return Mapper.Map<IEnumerable<Category>, IEnumerable<CategoryViewModel>>(category);

但它不会将 Id 映射到 CategoryId,而且我不想在 CategoryVeiwModel 中有 CreationTime

【问题讨论】:

    标签: c# automapper


    【解决方案1】:

    属性名称应该匹配,或者您必须覆盖Id 的映射。另外你必须明确Ignore CreationTime:

    AutoMapper.Mapper.CreateMap<Category, CategoryViewModel>()
    .ForMember(x => x.CategoryId, src => src.MapFrom(y => y.Id))
    .ForSourceMember(x => x.CreationTime, y => y.Ignore());
    

    【讨论】:

      【解决方案2】:

      我认为你可以使用继承和向下转换(或者是向上转换)

      public class Category : CategoryViewModel
      {
          public DateTime CreationTime { get; set; }
      }
      
      public class CategoryViewModel
      {
          public Guid  CategoryId { get; set; }
          public string Name { get; set; }
      }
      

      【讨论】:

      • 抱歉,Category 在 Model 中,CategoryViewModel 在 Service 中,Model 不应该看到 ViewModel!
      • 那么也许您希望这些课程是私有的?或者至少是属性?
      • 不,我只想将一个类的属性转换为另一个具有不同名称的属性,仅此而已
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2019-02-13
      • 2022-01-12
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多