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

C# 如何配置AutoMapper将所有引用类型的集合转换为整数集合?,c#,automapper,dto,boilerplate,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; } } 换句话说,StoreDTO将只有实体ID 现在,我正在使用以下代码设置AutoMapper: 正如你所看到的

假设我有以下实体:

public class Store
{
    public List<Product> Products { get; set; }
    public List<Employee> Employees { get; set; }
    public List<Camera> Cameras { get; set; }
}
换句话说,StoreDTO将只有实体ID

现在,我正在使用以下代码设置AutoMapper:


正如你所看到的,这是很多样板代码。有没有办法将AutoMapper配置为自动将所有引用类型的集合转换为整数的集合?

我们使用一点LINQ over reflection来实现这一点。您可以使用LINQ查询从产品、员工和照相机的某个基类派生的所有类型。接下来,通过调用CreateMap和ConvertUsing方法循环这些类型


没有打字扫描,这就是为什么像这样的东西不存在的原因。但是,根据需要进行您自己的类型扫描并不太糟糕。

我们使用一点LINQ过度反射来完成这项工作。您可以使用LINQ查询从产品、员工和照相机的某个基类派生的所有类型。接下来,通过调用CreateMap和ConvertUsing方法循环这些类型


没有打字扫描,这就是为什么像这样的东西不存在的原因。不过,根据需要自己进行打字扫描也不错。

谢谢。最后,我意识到编写反射代码比显式映射几个类需要更多的工作。谢谢。最后我意识到编写反射代码比显式映射几个类需要更多的工作。你也可以使用ValueInjector创建一个从id映射到int的注入,并用于你需要的任何类型。你也可以使用valueinjecter创建一个从id映射的注入设置为int,并用于所需的任何类型
public class StoreDTO
{
    public List<int> ProductIds { get; set; }
    public List<int> EmployeeIds { get; set; }
    public List<int> CameraIds { get; set; }
}
Mapper.CreateMap<Product, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Employee, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Camera, int>().ConvertUsing(x => x.Id);