我需要從數據庫中投射整數值,以使用Entity Framework和AutoMapper枚舉值。 問題似乎是列在某些情況下可以爲空而在其他情況下爲非空。 如果它們是可爲空的類型,我想爲默認值使用默認值(第一枚舉值)。AutoMapper - 可爲空或不可空的整數的不同的ProjectUsings
這裏是一個完整的,最小的例子,我把我目前的做法放在一起。 它是一個控制檯應用程序,包含實體框架和AutoMapper的當前nuget包。 它還需要一個數據庫(數據庫第一)與類似下面的表格:
CREATE TABLE [dbo].[MyTable] (
[Id] INT PRIMARY KEY,
[EnumValue] INT NOT NULL,
[EnumValueNullable] INT
)
控制檯應用程序的代碼(C#):
public enum MyEnum
{
Value1 = 0,
Value2 = 1
}
public class MyTableModel
{
public int Id { get; set; }
public MyEnum EnumValue { get; set; }
public MyEnum EnumValueNullable { get; set; }
}
public class MyProfile : Profile
{
public MyProfile()
{
this.CreateMap<MyTable, MyTableModel>();
this.CreateMap<int, MyEnum>().ProjectUsing(x => (MyEnum)x);
this.CreateMap<int?, MyEnum>().ProjectUsing(x => x.HasValue ? (MyEnum)x.Value : MyEnum.Value1);
}
}
static void Main(string[] args)
{
var config = new MapperConfiguration(x => x.AddProfile(new MyProfile()));
var result = new MyDataEntities().MyTable.ProjectTo<MyTableModel>(config).ToList();
}
執行此代碼時,它告訴我HasValue
未被定義爲類型System.Int32
。 這當然是正確的,但我認爲AutoMapper會選擇爲非空的整數指定的版本。 刪除任何貼圖(對於int和int?)都無濟於事,也無法移除它們或更改順序。
作爲一個方面說明,我正在將AutoMapper從版本3.3.1.0遷移到更大的項目中。 它似乎與該版本中定義的兩個地圖一起工作。
謝謝,這工作完美,看起來像一個堅實的解決方案!我將在AutoMapper存儲庫上創建一個GitHub問題,詢問他們是否可以確認這是一個錯誤,以及它是否會被修復。 –