Automapper Ignore вложенное свойство - PullRequest
0 голосов
/ 20 марта 2020

Я искал inte rnet в течение нескольких часов и не могу найти какие-либо решения для себя, или понимаю некоторые другие похожие ответы, которые я нахожу.

Все, что я пытаюсь сделать, это игнорировать свойства вложенного объекта в моем AutoMapper. Вот небольшой обзор моделей, с которыми я работаю (я удалил некоторые свойства, чтобы сделать их немного меньше для целей этого вопроса).

public class Product 
{
  public int ProductId { get; set; }
  public string Name { get; set; }
  public decimal Price { get; set; }
  public int CategoryId { get; set; }

  public Category Category { get; set; }
}

public class ProductDto 
{
  public int ProductId { get; set; }
  public string Name { get; set; }
  public decimal Price { get; set; }
  public int CategoryId { get; set; }

  public Category Category { get; set; }
}

public class Category
{
  public int CategoryId { get; set; }
  public string Name { get; set; }
  public string LabelColor { get; set; }
  public DateTime Created { get; set; }
}

public class CategoryDto
{
  public int CategoryId { get; set; }
  public string Name { get; set; }
  public string LabelColor { get; set; }
}

В принципе, все, что я хочу, - это мой автопроизводитель игнорировать Созданное свойство, поступающее из класса Category каждый раз, когда Продукт запрашивается через API. Самое близкое к этому достижение - это игнорирование всего объекта Category при запросе.

Вот текущая конфигурация сопоставления для моего класса продукта

public class ProductMapping: Profile
{
  public ProductMapping()
  {
    CreateMap<Product, ProductDto>()
       .ReverseMap()
       .ForMember(x => x.ProductId, o => o.Ignore());
  }
}

Мне удалось обнулить весь объект, поставив .ForPath(x => x.Category.Created, o => o.Ignore() перед .ReverseMap()

I Следует отметить, что, конечно, классы и класс mapper распределены по нескольким файлам, а класс CategoryMapping выглядит так же, как и ProductMapping. Это удаление свойства Created, хотя это и ожидается.

Если кто-то может помочь изолировать мою проблему или продемонстрировать лучший способ достижения этой цели, я открыт для предложений. До тех пор я буду продолжать пытаться выяснить эту проблему. Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Возможно, я ответил на мой собственный вопрос, но мне пришлось переключить тип данных в моем ProductDto с Category на CategoryDto. Я предполагал, что Automapper позаботится об этом сам.

Извините за это! Спасибо человеку, который нашел время, чтобы дать мне ответ, а!

0 голосов
/ 20 марта 2020

Если я правильно понимаю, если вы хотите игнорировать поле «Создано» из класса Category, тогда вам, возможно, следует поместить logi игнорирования c, когда отображение из CategoryDto -> Category или наоборот и отображение из ProductDto <-> остается тем же.

 CreateMap<Product, ProductDto>()
       .ReverseMap()
   CreateMap<Category, CategoryDto>()
       .ReverseMap()
       .ForMember(x => x.Created, o => o.Ignore());
...