Entity FrameworkとAutoMapperを使用してデータベースから列挙値に整数値を投影する必要があります。 問題は、列がnullの場合があり、他の場合はnullを指定できないことが考えられます。 null型の場合は、nullにデフォルト値(最初のenum値)を使用します。AutoMapper - null可能でnullでないintの異なるプロジェクト使用
ここに私の現在のアプローチをまとめた完全な最小限の例があります。 これは、Entity FrameworkとAutoMapperの現在のナゲットパッケージがインストールされたコンソールアプリケーションです。 また、以下のようなテーブルで(最初のデータベースの)データベースを必要とする:
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はnullを許可しない整数に指定されたバージョンを選択すると仮定しました。 どちらのマップ(intとint?)を削除しても、両方のマップを削除したり、順序を変更したりすることはできません。
大きなプロジェクトでAutoMapperをバージョン3.3.1.0から移行しています。 そのバージョンで定義されている両方のマップで動作しているようです。
ありがとう、これは完全に動作し、私のための固体ソリューションのように見えます! AutoMapperリポジトリにGitHubの問題を作成して、これがバグであることを確認できるかどうかと、修正されるかどうかを尋ねます。 –