使 AutoMapper 自动映射前缀属性

Sup*_*JMN 0 c# automapper

我希望 AutoMapper 像这样自动映射成员:

class Model 
{
    public int ModelId { get; set; }
}

class ModelDto 
{
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我会做一个

CreateMap<Model, ModelDTO>()
    .ForMember(x => x.Id, e => e.MapFrom(x => x.ModelId)
Run Code Online (Sandbox Code Playgroud)

但是,如何让 AutoMapper 自动进行映射?我的大部分课都是这样。主键的格式为:ClassName + "Id"。

编辑

我试过这个,但它不起作用:

class Program
{
    static void Main(string[] args)
    {
        Mapper.Initialize(exp =>
        {
            exp.CreateMap<User, UserDto>();
            exp.ForAllPropertyMaps(map => map.DestinationProperty.Name.Equals("Id"), (map, expression) => expression.MapFrom(map.SourceType.Name + "Id"));
        });


        var user = new User() { UserId = 34};
        var dto = Mapper.Map<UserDto>(user);
    }
}

public class UserDto
{
    public int Id { get; set; }
}

class User
{
    public int UserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*anu 5

是的,代码看起来很合理,但它不起作用。那是因为它在计算完属性映射后运行。在这种情况下没有,因为名称不匹配。我的坏:) 试试

exp.ForAllMaps((typeMap, mappingExpression) => 
    mappingExpression.ForMember("Id", o=>o.MapFrom(typeMap.SourceType.Name + "Id"))
);
Run Code Online (Sandbox Code Playgroud)