【发布时间】:2012-01-10 16:32:29
【问题描述】:
我正在使用 AutoMapper,并且我已经注册了一个 TypeConverter 来将可为空的 long 值映射到 long 值,如下所示:
public class NullableLongToLongConverter : TypeConverter<long?, long>
{
protected override long ConvertCore(long? source)
{
return source ?? 0;
}
}
这工作正常,并自动拾取任何可空的 long 转换为 long。
但是,我还有一些其他地图想要将可空长“转换”为可空长。这些也最终使用这种类型的转换器。例如,在下面的代码中,这两个属性都设置为 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();
}
}
【问题讨论】:
-
这是一个简化的例子吗?因为如果你想要的只是将 null long 转换?到 0 AutoMapper 为您执行此操作。删除您的
NullableLongToLongConverter,在您提供的示例中NotNullableLong将是0,NullableLong将在映射后的Bar中为null。 -
成功了,谢谢。我没有意识到 AutoMapper 有内置的约定(以及 int/long -> Enum!)
标签: c# c#-4.0 automapper typeconverter