2009-04-09 93 views
4

嘗試自動映射某些對象。
源對象在名稱,目標對象之前具有_屬性 - 沒有。 是否有可能實現一個映射創建,那麼automapper會將所有_properties映射到所有源類型的屬性
AutoMapper問題

class MyMapper<TFrom, TTo>{ 
    TTo PerformMap(TFrom fromObject){ 
     Mapper.CreateMap<From, To>(); // ??? 
     TTo result = Mapper.Map<From, To>(fromObject); 
     //result.Id.ShouldBe(value from TFrom._Id); 
     return result; 
    } 
} 

class From 
{ 
    public int _Id { get; set; } 
    public string _Name { get; set; } 
} 

class To 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

回答

8

東西我最近加入到AutoMapper可以幫助你 - 自定義命名約定。如果您查看行李箱(R107),請查看INamingConvention。現在,我有兩個命名約定(PascalCase和lower_case_underscore),但它實際上只是一個找出正確的正則表達式的事讓你去:

INamingConvention.cs

眼下,命名規範是全球性的和簡介 - 作用域。由於此功能是新功能,因此除測試外沒有任何其他文檔。

+0

我目前沒有使用AM,但很高興知道此功能。 :) – 2009-08-02 08:16:50

0

爲此,您可以添加自定義映射來解決這個特定的情況下:

Mapper.CreateMap<From, To>() 
    .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src._Id)) 
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src._Name)); 
+0

That`s我需要的效果,但是......我想,要成爲更通用。 就像說 - automapper一樣,映射這兩個對象,並且忽略道具名稱的下劃線,如果它是名字中的第一個符號。否則 - 我必須注意所有的對象。 – 2009-04-29 07:59:22

1

這是我正在做

Mapper.Initialize(cfg => 
     { 
      cfg.RecognizeDestinationPrefixes(new []{"_"}); 
      cfg.RecognizePrefixes(new[] { "_" }); 

      cfg.CreateMap<To, From>().ReverseMap(); 
     });