既存のデータベースから DTO にマッピングし、再び Automapper (4.1.1) を使用していますが、いくつかの小さな問題に遭遇しました。
データベーステーブルの(簡略化された)モデルがあります:
public class USER_DETAILS
{
[Key]
public string UDT_LOGIN { get; set; }
public string UDT_USER_NAME { get; set; }
public string UDT_INITIALS { get; set; }
public string UDT_USER_GROUP { get; set; }
public decimal UDT_CLAIM_LIMIT { get; set; }
public string UDT_CLAIM_CCY { get; set; }
}
および DTO オブジェクト:
public class User
{
public string Login { get; set; }
public string UserName { get; set; }
public string Initials { get; set; }
public string UserGroup { get; set; }
public double ClaimLimit { get; set; }
public string ClaimCurrency { get; set; }
}
プロフィールを作成しました
public class FromProfile : Profile
{
protected override void Configure()
{
this.RecognizePrefixes("UDT_");
this.ReplaceMemberName("CCY", "Currency");
this.SourceMemberNamingConvention = new UpperUnderscoreNamingConvention();
this.DestinationMemberNamingConvention = new PascalCaseNamingConvention();
this.CreateMap<decimal, double>().ConvertUsing((decimal src) => (double)src);
this.CreateMap<USER_DETAILS, User>();
}
}
ただし、Automapper は構成内でこれほど多くの設定を組み合わせることを好まないようです。モデルを単純化しても得られない
this.RecognizePrefixes("UDT_");
this.ReplaceMemberName("CCY", "Currency");
一緒に働きながら
this.CreateMap<decimal, double>().ConvertUsing((decimal src) => (double)src);
テストのモデルでは問題なく動作しますが、データベースに対して使用すると失敗します。
これらすべてを連携させる方法はありますか、またはForMember()を使用するようにフォールバックする必要があります。このシステムにはたくさんのテーブルがあるので、これが機能することを本当に望んでいました。それぞれを個別に行う必要はありません。