2016-04-19 2 views
0

Я пытаюсь зарегистрировать соглашение о сопоставлении для обработки сопоставления классов с именами Паскаля Case для классов с именами подчёркивания с помощью постфикса и префикса и обратно. Я пытался следовать примерам, но не могу понять, как он должен работать.Преобразования имен свойств AutoMapper

Это одна из многих вещей, которые я пробовал, это выглядит, как он должен работать (на мой взгляд :)), но это, кажется, не делать ничего:

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"; } 
    } 
} 

Что я отсутствует здесь?

ответ

0

Я наконец нашел рабочее решение. Я создал два профиля, по одному для каждого «направления», и добавил к ним сопоставления.

Я не слишком доволен этим, так как я предпочел бы сопоставления в одном файле (группируя их по бизнес-области). Но, по крайней мере, это работает ... :)

Я также попытался помещать регистрацию в тот же профиль и использовать метод .WithProfile («ToUnderscoreWithPrefix»), но я не получил этого, чтобы работать.

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"; 
} 
Смежные вопросы