Как для сопоставления моего сложного типа использовать AutoMapper? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть некоторые проблемы с AutoMapper.Может кто-нибудь объяснить мне, как я должен создать карту?Не бойтесь много блоков кода, пожалуйста.Это очень простая логика, я просто не могу понять, как работает картограф ... спасибо за помощь.AutoMapperConfig:

  private void MappingApiInputSubscription(IMapperConfigurationExpression expression)
    {
        expression.CreateMap<ApiInputSubscription, Subscription>()
            .ForMember(
                dest => dest.SearchRequest,
                opt => opt.MapFrom(src =>src.SearchRequest));
    }

ApiSearchRequest:

 public class ApiSearchRequest
{
    public string Text { get; set; }

    public int? CategoryId { get; set; }

    public bool PriceRequired { get; set; }

    public int? MinPrice { get; set; }

    public int? MaxPrice { get; set; }

    public int? CurrencyId { get; set; }

    public DateTime? PublishDateFrom { get; set; }

    public DateTime? PublishDateTo { get; set; }

    public DateTime? EventDateFrom { get; set; }

    public DateTime? EventDateTo { get; set; }

    public bool PhotoAttached { get; set; }

    public int? OwnerId { get; set; }

    public ICollection<int> Offices { get; set; }
}

Моя модель ApiInputSubscription:

[Serializable]
public class ApiInputSubscription
{
    public string SubscriptionName { get; set; }
    public ApiSearchRequest SearchRequest { get; set; }
}

Моя модель подписки:

 public class Subscription : ISubscription
{
    public int Id { get; set; }

    public int OwnerId { get; set; }

    public string SubscriptionName { get; set; }

    public SearchRequest SearchRequest { get; set; }

    public ISubscription WithOwner(IUser user)
    {
        user = user ?? throw new ArgumentNullException(nameof(user), "subscription owner can't be null!");
        var clone = (Subscription)MemberwiseClone();
        clone.OwnerId = user.Id;
        return clone;
    }
}

SearchRequest Class:

public class SearchRequest : ISearchRequest
{
    public string Text { get; set; }

    public int? CategoryId { get; set; }

    public bool PriceRequired { get; set; }

    public int? MinPrice { get; set; }

    public int? MaxPrice { get; set; }

    public int? CurrencyId { get; set; }

    public DateTime? PublishDateFrom { get; set; }

    public DateTime? PublishDateTo { get; set; }

    public bool EventDateRequired { get; set; }

    public DateTime? EventDateFrom { get; set; }

    public DateTime? EventDateTo { get; set; }

    public bool PhotoAttached { get; set; }

    public int PostsOnPage { get; set; } = 10;

    public PostStatus Status { get; set; }

    public SortPostsBy SortPostsOrder { get; set; }

    public bool OnlyInappropriate { get; set; }

    public int? OwnerId { get; set; }

    public int Skip { get; set; }

    public ICollection<int> Offices { get; set; }
}

1 Ответ

0 голосов
/ 30 ноября 2018

Вы должны указать AutoMapper, во-первых, как сопоставить ApiSearchRequest с SearchRequest, а во-вторых, игнорировать все остальные свойства:

private void MappingApiInputSubscription(IMapperConfigurationExpression expression)
{
    expression.CreateMap<ApiSearchRequest, SearchRequest>()
       // add other properties as required
      .ForMember(dest => dest.PostsOnPage, opt => opt.Ignore());

    expression.CreateMap<ApiInputSubscription, Subscription>()
        .ForMember(
            dest => dest.SearchRequest,
            opt => opt.MapFrom(src => src.SearchRequest))
        .ForAllOtherMembers(dest => dest.Ignore());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...