AutoMapper属性名称转换

时间:2016-04-19 08:19:17

标签: automapper

我试图注册一个映射约定来处理从具有Pascal Case名称的类到具有带有后缀和前缀的下划线名称的类的映射,然后再返回。我试图按照例子,但无法理解它应该如何工作。

这是我尝试过的很多事情之一,它看起来应该有效(在我看来:)),但它似乎没有做任何事情:

public class PascalCaseEntity
{
    public string CallingSystem { get; set; }
}

public class UnderscoreWithPrefixAndPostfixEntity
{
    public string p_calling_system_ { get; set; }
}

public class PartsMappings
{
    public void Apply()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.AddProfile<FromUnderscoreMapping>();
            cfg.AddProfile<ToUnderscoreMapping>();

            cfg.CreateMap<PascalCaseEntity, UnderscoreWithPrefixAndPostfixEntity>()
                  .WithProfile("ToUnderscoreMapping");
            cfg.CreateMap<UnderscoreWithPrefixAndPostfixEntity, PascalCaseEntity>()
                  .WithProfile("FromUnderscoreMapping");
        });
    }
}

public class FromUnderscoreMapping : Profile
{
    protected override void Configure()
    {
        RecognizePrefixes("p_");
        RecognizePostfixes("_");
        SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
        DestinationMemberNamingConvention = new PascalCaseNamingConvention();
    }

    public override string ProfileName
    {
        get { return "FromUnderscoreMapping"; }
    }
}

public class ToUnderscoreMapping : Profile
{
    protected override void Configure()
    {
        RecognizeDestinationPrefixes("p_");
        RecognizeDestinationPostfixes("_");
        SourceMemberNamingConvention = new PascalCaseNamingConvention();
        DestinationMemberNamingConvention = new LowerUnderscoreNamingConvention();
    }

    public override string ProfileName
    {
        get { return "ToUnderscoreMapping"; }
    }
}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我终于找到了一个有效的解决方案。我创建了两个配置文件,每个配置文件一个&#34;方向&#34;,并添加了映射到它们。

我对它不太满意,因为我宁愿在同一个文件中使用映射(将它们分组到业务区域)。但至少它有效...... :)

我也尝试将注册放在同一个配置文件中,并使用.WithProfile(&#34; ToUnderscoreWithPrefix&#34;)方法,但我没有让它工作。

Mapper.Initialize(cfg =>
{
    cfg.AddProfile(new ToUnderscoreWithPrefixMappings());
    cfg.AddProfile(new FromUnderscoreWithPrefixMappings());
});

public class ToUnderscoreWithPrefixMappings : Profile
{
    protected override void Configure()
    {
        RecognizeDestinationPrefixes("P", "p");

        SourceMemberNamingConvention = new PascalCaseNamingConvention();
        DestinationMemberNamingConvention = new LowerUnderscoreNamingConvention();

        CreateMap<PascalCaseEntity, UnderscoreWithPrefixAndPostfixEntity>();
    }

    public override string ProfileName { get; } = "ToUnderscoreWithPrefix";
}

public class FromUnderscoreWithPrefixMappings : Profile
{
    protected override void Configure()
    {
        RecognizePrefixes("P_", "p_");
        RecognizePostfixes("_");

        SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
        DestinationMemberNamingConvention = new PascalCaseNamingConvention();

        CreateMap<UnderscoreWithPrefixAndPostfixEntity, PascalCaseEntity>();
    }

    public override string ProfileName { get; } = "FromUnderscoreWithPrefix";
}