c# - 如何配置 AutoMapper 将所有引用类型集合转换为整数集合?

标签 c# automapper dto boilerplate

假设我有以下实体:

public class Store
{
    public List<Product> Products { get; set; }
    public List<Employee> Employees { get; set; }
    public List<Camera> Cameras { get; set; }
}

换句话说,Store 包含ProductsEmployees 和安全Cameras。我想将此 Store 转换为 StoreDTO:

public class StoreDTO
{
    public List<int> ProductIds { get; set; }
    public List<int> EmployeeIds { get; set; }
    public List<int> CameraIds { get; set; }
}

换句话说,StoreDTO 将只有实体 ID。

现在,我正在使用这段代码来设置 AutoMapper:

Mapper.CreateMap<Product, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Employee, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Camera, int>().ConvertUsing(x => x.Id);

如您所见,它包含大量样板代码。有什么方法可以配置 AutoMapper 自动将引用类型的所有集合转换为整数集合?

最佳答案

我们通过一些 LINQ over reflection 来做到这一点。您可以使用 LINQ 查询从 Product、Employee 和 Camera 的某些基类派生的所有类型。接下来,循环调用 CreateMap 和 ConvertUsing 方法的那些类型。

没有类型扫描可言,这就是为什么像这样的东西实际上并不存在。但根据需要进行自己的类型扫描也不错。

关于c# - 如何配置 AutoMapper 将所有引用类型集合转换为整数集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764136/

相关文章:

c# - 如何使用 C# 检索存储过程?

Automapper - 将 NameValueCollection 转换为强类型集合

c# - 自动映射器将列表复制到列表

java - 新项目是否应该采用SDO(服务数据对象)?

C#:为迭代正确锁定队列

c# - 通过 JSON.NET 反序列化 Elasticsearch 结果

dll - POCO,DTO,DLL和贫血域模型

model-view-controller - 什么是数据传输对象 (DTO)?

C# 集合

automapper - 如何使用AutoMapper将父级引用分配给子级中的属性