具有嵌套 1:M、M:1 关系的 Automapper 映射

Automapper mapping with nested 1:M, M:1 relations

我有这样的关系:

一对多:订单-订单详情

多对一:订单详细信息-产品

我的模特:

public class Order
{ 
  public ICollection<OrderDetail> OrderDetails {get; set;}
}

public class OrderDetails
{
  public Order Order { get; set; }
  public Product Product {get; set;}
}

public class Product
{
  public ICollection<OrderDetail> OrderDetails { get; set; }
}

我有几个嵌套查询,我正在尝试将我的订单映射到 DTO。我的订单如下:

| Order
|----OrderDetails
|    |----Product
|----OrderDetails
     |----Product

如果我的 DTO 看起来像这样:

public class OrderDetailsResponse
{
   .....

   public Order Order { get; set; }
}

如何配置 AutoMapper 来实现这一点? 任何提示或建议将不胜感激。

谢谢。

如果您的实体设置正确,AutoMapper 应该会处理这种情况。我注意到的第一件事是你可能对关系没有很好的理解。查看此示例以了解详细信息。

https://www.entityframeworktutorial.net/efcore/one-to-many-conventions-entity-framework-core.aspx

正确设置模型后,以下一行就足够了。

public AutoMapperProfile()
{
    CreateMap<Order, OrderDetailsResponse>();
}

你的模型应该是

public class Order
{  
    // Maybe some more properties

    public ICollection<OrderDetail> OrderDetails {get; set;}
}

public class OrderDetails
{  
    // Maybe some more properties

    public Product Product {get; set;}
}

public class Product
{  
    // Maybe some more properties

    // You do not need anything here.
}

您可以在此处以两种方式查看模型之间定义的关系。 现在,您的 DTO 可能是

public class OrderDetailsResponse
{  
    // Maybe some more properties

    public ICollection<OrderDetail> OrderDetails { get; set; }
}