C# 当通过AutoMapper映射大列表时,如何优化每个项目的调用转换器?

C# 当通过AutoMapper映射大列表时,如何优化每个项目的调用转换器?,c#,automapper,C#,Automapper,存在实体外部材料。它来自外部系统,在该系统中具有ID。 在我的系统中,我使用guid。所以我有一个ExternalAIdToGuidConverter,它为每个外部实体创建/获取guid。 对于每个外部实体,都有外部{EntityName}IdToGuidConverter。例如,材质(ExternalMaterialGroupIDToGuidedConverter、ExternalMaterialClassIDToGuidedConverter的外观完全相同): 公共类外部MaterialdT

存在实体外部材料。它来自外部系统,在该系统中具有ID。 在我的系统中,我使用guid。所以我有一个ExternalAIdToGuidConverter,它为每个外部实体创建/获取guid。 对于每个外部实体,都有外部{EntityName}IdToGuidConverter。例如,材质(ExternalMaterialGroupIDToGuidedConverter、ExternalMaterialClassIDToGuidedConverter的外观完全相同):

公共类外部MaterialdToGuidConverter:IValueConverter
{
...
公共Guid转换(int sourceMember,ResolutionContext上下文)
{
var result=\u externalitidmapper.GetOrCreateMap(sourceMember);//从映射表中选择前1名。如果未找到->创建新记录
result.Wait();
返回result.result.InternalId;
}
}
现在,当我需要使用GUI获取实体时,我使用映射配置文件:

public class MaterialMappingProfile : Profile
{
    public MaterialMappingProfile()
    {
        CreateMap<ExternalMaterial, MaterialDto>()
            .ForMember(o => o.Id, o => o.ConvertUsing<ExternalMaterialIdToGuidConverter, int>(i => i.nKey))
            .ForMember(o => o.MaterialClassId, o => o.ConvertUsing<ExternalMaterialClassIdToGuidConverter, int>(i => i.nMaterialClassLink))
            .ForMember(o => o.MaterialGroupId, o => o.ConvertUsing<ExternalMaterialGroupIdToGuidConverter, int>(i => i.nGroupLink));
            // .ForMember(otherFields)
        }
}
公共类材质配置文件:配置文件
{
公共材料配置文件()
{
CreateMap()
.ForMember(o=>o.Id,o=>o.ConvertUsing(i=>i.nKey))
.ForMember(o=>o.MaterialClassId,o=>o.ConvertUsing(i=>i.nMaterialClassLink))
.ForMember(o=>o.MaterialGroupId,o=>o.ConvertUsing(i=>i.nGroupLink));
//.FormMember(其他字段)
}
}

但是,我在外部系统中有很多实体。现在程序为每个外部对象启动外部映射转换器。我想优化它,因为通常我会映射大列表并返回它。有什么方法可以解决这个问题?

最好的优化方法是完全放弃AutoMapper。我同意@AlexanderPetrov。。。GUID是否可预测是否重要。。。如果没有,则:
intid=321;var guidString=$“aaaaaaaa-aaaa-aaaa-aaaa-aa{id:0000000000}”;var guid=guid.Parse(guidString)
(假设外来的
id
确实是
int
)不幸的是,它确实很重要。所以它应该是随机生成的,没有AM你怎么做?
public class MaterialMappingProfile : Profile
{
    public MaterialMappingProfile()
    {
        CreateMap<ExternalMaterial, MaterialDto>()
            .ForMember(o => o.Id, o => o.ConvertUsing<ExternalMaterialIdToGuidConverter, int>(i => i.nKey))
            .ForMember(o => o.MaterialClassId, o => o.ConvertUsing<ExternalMaterialClassIdToGuidConverter, int>(i => i.nMaterialClassLink))
            .ForMember(o => o.MaterialGroupId, o => o.ConvertUsing<ExternalMaterialGroupIdToGuidConverter, int>(i => i.nGroupLink));
            // .ForMember(otherFields)
        }
}