2012-01-10 93 views
2

我使用AutoMapper,我已經註冊的類型轉換器可空長值長值映射像這樣:AutoMapper類型轉換器映射可空類型不可空類型

public class NullableLongToLongConverter : TypeConverter<long?, long> 
{ 
    protected override long ConvertCore(long? source) 
    { 
     return source ?? 0; 
    } 
} 

這工作得很好,並自動拾取任何可空的多頭被轉換爲多頭。

但是,我還有一些其他地圖想要將可空對齊轉換爲可空對齊。這些也最終使用這種類型的轉換器。例如,兩個屬性在下面的代碼中都被設置爲0,但我希望NullableLong被設置爲null。難道我做錯了什麼?

public class Foo 
{ 
    public long? NullableLong{get {return null;}} 
    ...... 
} 

public class Bar 
{ 
    public long NotNullableLong{get;set;} 
    public long? NullableLong{get;set;} 
    ...... 
} 

public static class ComplicatedMapRegister 
{ 
    public static void RegisterMap() 
    { 
     Mapper.CreateMap<Foo, Bar>() 
      .ForMember(b => b.NotNullableLong, opt => opt.MapFrom(f.NullableLong)) 
      .ForMember(b => b.NullableLong, opt => opt.MapFrom(f.NullableLong)) 
      ..... 
    } 
} 

public static class AutoMapperRegistration 
{ 
    public static void RegisterAllMaps() 
    { 
     Mapper.CreateMap<long?, long>().ConvertUsing<NullableLongToLongConverter>(); 
     ComplicatedMapRegister.RegisterMap(); 
    } 
} 
+1

這是一個簡單的例子嗎?因爲如果你想要的只是將null轉換爲long?爲0 AutoMapper爲您做到這一點。刪除你的'NullableLongToLongConverter',在你提供的示例中'映射後''NotNullableLong'將爲'0','NullableLong'在'Bar'中爲'null'。 – nemesv 2012-01-10 16:55:34

+0

工作,謝謝。我沒有意識到AutoMapper的內置約定(以及int/long - > Enum!) – Tevin 2012-01-10 17:19:22

回答

0

你只有註冊映射從long?long的轉換器。難道你不需要創建並註冊一個將從long?映射到long?的「轉換器」?