次の 2 つのクラスがあります (簡潔にするために多くのプロパティを省略しています)。
サービス層 POCO:
public class TicketFlag
{
public ContactKey ContactKey;
}
LINQ to SQL で生成された POCO:
public class TicketFlag
{
public string ContactKey;
}
AutoMapper を使用して、サービス呼び出しでこれら 2 つの間をマッピングしようとすると、データベースの保存時に次の例外が発生します。
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
---> System.ArgumentException: Type 'ContactKey' does not have a default constructor
ContactKey には、意図的に既定のコンストラクターがありません。基本的に、文字列とオブジェクトのリストを受け取り、それ自体をシリアル化/逆シリアル化できます。
私は次のようにマッピング関数を作成しようとしました(そしてそれは逆です):
Mapper.CreateMap<string, ContactKey>().ConvertUsing(s => ContactKeySerializer.Serialize(s));
しかし、ContactKey には既定のコンストラクターがないため、まだ苦情が寄せられています。
AutoMapper がデフォルトのコンストラクターを使用してプロパティ マッピングを行わないようにする方法はありますか? 実際には、ContactKey のプロパティをマッピングするだけでは十分ではありません。コンストラクターを呼び出すか、ContactKeySerializer クラスから吐き出す必要があります。