AutoMapper TypeConverter将可空类型映射到不可空类型 [英] AutoMapper TypeConverter mapping nullable type to not-nullable type
问题描述
我正在使用AutoMapper,我已经注册了一个TypeConverter将可空的长值映射为长整型值,例如:
I'm using AutoMapper, and I've registered a TypeConverter to map nullable long values to long values like so:
public class NullableLongToLongConverter : TypeConverter<long?, long>
{
protected override long ConvertCore(long? source)
{
return source ?? 0;
}
}
此操作正常,并自动选择任何可空的长
This works fine, and automatically picks up any nullable longs being converted to longs.
但是,我还有一些其他地图想要将可空的longs转换为可空的longs。这些也最终使用这种类型的转换器。例如,两个属性在下面的代码中被设置为0,但是我希望NullableLong被设置为null。我做错了什么?
However, I've got some other maps which want to 'convert' nullable longs to nullable longs. These also end up using this type converter. For example, both properties are getting set to 0 in the code below, but I'd expect NullableLong to be set to null. Am I doing something wrong?
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();
}
}
推荐答案
只有注册了一个转换器,从 long?
映射到 long
。你不是只需要创建并注册一个从 long?
映射到 long?
的转换器?
You've only registered a converter that maps from long?
to long
. Don't you just need to create and register a 'converter' that will map from long?
to long?
?
这篇关于AutoMapper TypeConverter将可空类型映射到不可空类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!