Я использую AutoMapper, и я зарегистрировал TypeConverter, чтобы отобразить обнуляемые длинные значения на длинные значения, например:
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();
}
}