【发布时间】:2019-08-12 08:31:16
【问题描述】:
我希望在 C# .NET Core 中使用 AutoMapper 将一组 API 响应映射到一组实体对象,这些响应由外键隐式结构化,以便我可以存储在数据库中。我从 3 个单独的端点接收以下有效负载:。
public class CompanyResponse
{
public int CompanyId { get; set; }
public string Name { get; set; }
public string HeadOffice { get; set; }
}
public class FactoryResponse
{
public int FactoryId { get; set; }
public string Address { get; set; }
public int CompanyId { get; set; }
}
public class ProductResponse
{
public int ProductId { get; set; }
public string Name { get; set; }
public int FactoryId { get; set; }
}
这是我想保存它们的嵌套结构:
public class Company
{
public string Name { get; set; }
public string HeadOffice { get; set; }
public IEnumerable<Factory> Factories { get; set; }
}
public class Factory
{
public string Address { get; set; }
public IEnumerable<Product> Products { get; set; }
}
public class Product
{
public string Name { get; set; }
}
Company -> Factory 和 Factory -> Product 分别是一对多的关系。
映射“Name”和“HeadOffice”等属性很容易,我已经创建了从每个 DTO 到其对应对象的 AutoMapper 映射。但是我不知道如何从 Id 中推断出子对象的列表。
这是我目前拥有的地图:
CreateMap<CompanyResponse, Company>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
.ForMember(dest => dest.HeadOffice, opt => opt.MapFrom(src => src.HeadOffice));
CreateMap<FactoryResponse, Factory>()
.ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.Address));
CreateMap<ProductResponse, Product>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name));
任何帮助将不胜感激!
【问题讨论】:
-
恐怕这是不可能的,因为 AutoMapper 在映射其中一个集合时不知道其他集合。
-
附带说明,您不需要自动映射具有相同名称的属性(例如 Name/HeadOffice)
-
这需要在 AutoMapper 之外完成
-
您将无法在映射内容中执行此操作。此外,不建议从 DTO 映射到域对象 lostechies.com/jimmybogard/2009/09/18/…
-
我相信我的问题存在混淆 - 我希望从中映射的模型是通过对外部端点请求的响应获得的。它们是我想映射到实体对象的响应对象。我已经相应地编辑了问题
标签: c# linq asp.net-core automapper