AutoMapper TypeConverter отображает обнуляемый тип в необнуляемый тип - PullRequest
2 голосов
/ 10 января 2012

Я использую 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();
    }
}

1 Ответ

0 голосов
/ 10 января 2012

Вы только что зарегистрировали конвертер, который отображается с long? на long. Разве вам просто не нужно создавать и регистрировать «конвертер», который будет отображаться с long? на long??

...