自动映射器忽略嵌套属性

时间:2020-03-19 21:36:43

标签: c# asp.net-core automapper ef-core-2.0

我已经在互联网上搜索了几个小时,似乎无法为自己找到解决方案,也无法理解我正在寻找的其他一些类似答案。

我要做的就是忽略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; }
}

基本上,我想做的是只要通过API查询产品,我的自动映射器都会忽略来自Category类的Created属性。我最接近实现此目标的方法是在查询时忽略整个Category对象。

这是我的Product类的当前映射配置

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()之前来清空整个对象

我应该注意,这些类和mapper类当然是通过多个文件分发的,并且CategoryMapping类看起来与ProductMapping相同。它正在删除Created属性,尽管这是预期的。

如果有人可以帮助隔离我的问题,或演示实现此问题的更好方法,我欢迎您提出建议。到那时,我将继续尝试解决此问题。感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果我正确理解了是否要忽略Category类中的Created字段,那么在从CategoryD映射到Category或从ProductD映射到<->的映射保持不变时,您应该放置忽略逻辑。

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

答案 1 :(得分:0)

可能已经回答了我自己的问题,但是我要做的是将ProductDto中的Data类型从Category切换到CategoryDto。我当时以为Automapper会自己解决这个问题。

对不起!谢谢那些花时间给我答案的人!

相关问题