AutoMapper 사용 노트

3369 단어 mapper
  •  맵 생 성 및 사용
    Mapper.CreateMap<SourceType, DestinationType>()
    
            .ForMember(dest=> dest.Property, opt => opt.MapFrom(src => src.OtherProperty))
    
            .ForMember(dest => dest.IgnoreProperty, opt => opt.Ignore());
    
    

    그리고 이 지 도 를 사용 할 수 있 습 니 다:
    DestinationType dest = Mapper.Map<SourceType, DestinationType>(source);
  • Mapper.AssertConfigurationIsValid(); 맵 이 완전 한 지 확인 하 는 데 사 용 됩 니 다.Destinate model 의 무시 되 지 않 은 필드 는 모두 매 핑 되 어야 합 니 다.그렇지 않 으 면 이 방법 에 의 해 오류 가 발생 합 니 다!
  • 대응 하지 않 는 모든 속성 을 무시 하려 면 확장 방법 을 쓸 수 있 습 니 다.
    public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>
    
    (this IMappingExpression<TSource, TDestination> expression)
    
            {
    
                const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
    
                var sourceType = typeof (TSource);
    
                var destinationProperties = typeof (TDestination).GetProperties(flags);
    
    
    
                foreach (var property in destinationProperties)
    
                {
    
                    if (sourceType.GetProperty(property.Name, flags) == null)
    
                    {
    
                        expression.ForMember(property.Name, opt => opt.Ignore());
    
                    }
    
                }
    
                return expression;
    
            }

    사용 방법:
    Mapper.CreateMap<SourceType, DestinationType>().IgnoreAllNonExisting()
    
                    .ForMember(prop => x.Property, opt => opt.MapFrom(src => src.OtherProperty));

     개정:InnoreAll NonExisting 이라는 확장 방법 은 ForMember 이후 에 두 지 않 는 것 이 좋 습 니 다.ForMember 는 주로 이름 이 다른 속성 을 수 동 으로 매 핑 하 는 데 사용 되 기 때문에 매 핑 을 한 후에 IgnoreAll 을 추가 하 는 것 이 좋 습 니 다.
  • 맵 을 사용 할 때 새로운 대상 을 만 들 지 않 으 려 면 어떻게 해 야 합 니까?아주 간단 합 니 다.
    Mapper.Map<Source, Destination>(source, destination);

     
  • AutoMapper 도 List 를 쉽게 전환 할 수 있 습 니 다.
    Mapper.CreateMap<SourceType, DestinationType>();
    
    List<Destination> destList = Mapper.Map<List<Source>, List<Destination>(sourceList); 

  •  맵 을 만 드 는 방법 도 알 고 맵 을 사용 하 는 방법 도 알 고 있 습 니 다.우 리 는 확장 방법 을 더 써 서 맵 을 확장 방법 에 넣 을 수 있 습 니 다.이렇게 호출 하 는 코드 가 더욱 간결 하고 Mapper 의 흔적 도 보이 지 않 습 니 다.예 를 들 어:
    public static class MapperExtensions
    
        {
    
            // Company
    
            public static Company ToEntity(this CompanyViewModel model)
    
            {
    
                return Mapper.Map<CompanyViewModel, Company>(model);
    
            }
    
    
    
            public static Company ToEntity(this CompanyViewModel model, Company entity)
    
            {
    
                return Mapper.Map(model, entity);
    
            }
    
    
    
            public static CompanyViewModel ToModel(this Company entity)
    
            {
    
                return Mapper.Map<Company, CompanyViewModel>(entity);
    
            }
    
    
    
            public static List<CompanyViewModel> ToModelList(this List<Company> entities)
    
            {
    
                return Mapper.Map<List<Company>, List<CompanyViewModel>>(entities);
    
            }
    
    }
    
    

    호출 방식:
    var model = entity.ToModel(); 
    
    var entity = model.ToEntity();
    
    
    
    var entity = model.ToEntity(entity);
    
    

      
  • 좋은 웹페이지 즐겨찾기