編輯:你不需要做任何這個,但我想我會留在這裏尋找類似的解決方案的人。真的所有您需要做的僅僅是提供一個映射,從int
到int?
這樣的:Mapper.Map<int, int?>()
在這種情況下
,我相信你可以使用一個自定義類型轉換,從automappers ITypeConverter繼承。此代碼的工作原理,我已經通過.NET小提琴運行它:
using System;
using AutoMapper;
public class Program
{
public void Main()
{
CreateMappings();
var vm = Mapper.Map<MyThingWithInt, MyThingWithNullInt>(new MyThingWithInt());
if (vm.intProp.HasValue)
{
Console.WriteLine("Value is not NULL!");
}
else
{
Console.WriteLine("Value is NULL!");
}
}
public void CreateMappings()
{
Mapper.CreateMap<int, int?>().ConvertUsing(new ZeroToNullIntTypeConverter());
Mapper.CreateMap<MyThingWithInt, MyThingWithNullInt>();
}
public class ZeroToNullIntTypeConverter : ITypeConverter<int, int?>
{
public int? Convert(ResolutionContext ctx)
{
if((int)ctx.SourceValue == 0)
{
return null;
}
else
{
return (int)ctx.SourceValue;
}
}
}
public class MyThingWithInt
{
public int intProp = 0;
}
public class MyThingWithNullInt
{
public int? intProp {get;set;}
}
}
不完全確定你想在這裏,但看看'忽略'和'AllowNullDestinationValues'映射指令。這可能會給你你需要的東西。 – Mightymuke
我嘗試了一個快速示例,並且Automapper似乎處理將空引用類型映射爲可爲null的int(將null指定給nullable-int)。你能否展示一些不按照你喜歡的方式工作的示例代碼? – PatrickSteele
@PatrickSteele我的問題是我只喜歡那個映射來查看用於創建新實體的模型,而不是用於編輯實體的模型。通過編輯,如果int爲零,我想將它保持爲零而不是將其歸零。 – ProfK