2

AutoMapper を使用して非常に単純な Enum をマップしようとしています。

このマッピングが存在する理由は、PriorityType がサーバー上で実行される dotnet 4.0 ドメイン モデル アセンブリにあるためですが、DataContract アセンブリの dotnet 3.5 には Dto が必要です。

public enum PriorityType// : byte
{
    Low = 0,
    Medium,
    High,
    Urgent
}

[Serializable]
public enum PriorityTypeDto// : byte
{
    Low = 0,
    Medium,
    High,
    Urgent
}

Mapper.CreateMap<PriorityType, PriorityTypeDto>();

親タイプのコメントを外すとbyte(実際には 255 を超える可能性のあるエントリは必要ありません!) TypeInitializationException、. ConvertUsing を使用しても回避できませんでした。

なぜ周りのしゃっくりbyte

編集 1

AutoMapper をさらにデバッグすると、基本的に、宛先内のすべての書き込み可能なプロパティを取得し、同じ名前の対応するプロパティをチェックします。

Enum の場合、AutoMapper がvalue__マップしようとするリフレクションで表示されるという名前のフィールドがあります。

エラーは v2.2 (2.1 にありました) とは異なりますが、バイトの列挙をマッピングすると例外がスローされますが、int32 の列挙をマッピングすると問題なく動作します。

ここでエラーが発生し、

public delegate object LateBoundFieldGet(object target);

Expression<LateBoundFieldGet> lambda =
    Expression.Lambda<LateBoundFieldGet>(
        Expression.Convert(member, typeof(object)),
        instanceParameter);

return lambda.Compile();

lambda.Compile()を投げますInvalidProgramException

まだ理由を理解しようとしています。

編集 2

AutoMapper GitHubでも報告された問題。

4

1 に答える 1

1

CreateMap 呼び出しは必要ありません。AutoMapper は、構成なしで列挙型を自動的に処理します。CreateMap を削除するだけで準備完了です。

于 2012-09-24T13:03:51.457 に答える