2012-03-01 3 views
5

AutoMapper 2.0では、プロファイルを使用してマッピングを設定しました。私はSourceMemberNameTransformerDestinationMemberNameTransformerを使用して、ソースと宛先のプロパティ名を一致させます。AutoMapper 2.1.265のメンバーがいません

2.1.265では、これらのプロパティはプロファイル上に存在しません。彼らはなぜ彼らが削除されたか知っていますか?しかし、もっと重要なのは、どのようにしてこの機能を複製できるかです。

編集

私はSourceMemberNamingConventionDestinationMemberNamingConventionで見てきたが、私はそれらの作業方法についての任意のドキュメントを見つけることができません。誰でもカスタムを使った経験がありますかINamingConvention

編集2

ソース・メンバーは、サードパーティのデータベースから生成されています。通常、それらは単語間にアンダースコアを含む小文字の列名をすべて使用します。時には彼らは下線を外し、時にはランダムな大文字小文字を投じることもあります。

宛先メンバーは、可能な限り.NET命名規則に従います。アンダースコアは削除され、アンダースコアに続く最初の文字は大文字になりました。メンバー名を読みやすくするために追加の変更が加えられました。この問題を解決するには

、私は未来からの人々のための

詳しい情報を編集3

SourceMemberNameTransformer = name => name.Replace("_", "").ToUpper() 
DestinationMemberNameTransformer = name => name.ToUpper() 

を設定します。

INamingConventionがどのように使用されているかを確認するためにソースを調べました。それはそれが少し誤解を招くように設計されている方法。インタフェースは

public interface INamingConvention 
{ 
    Regex SplittingExpression { get; } 
    string SeparatorCharacter { get; } 
} 

しかし、AutoMapperユーザないのでSourceMemberNamingConventionDestinationMemberNamingConvention

両方に対するインタフェースの完全な定義は、それが先の型の各メンバーをとり、DestinationMemberNamingConvention.SplittingExpressionを適用befinedれます。その後、一致する部品を取り、SourceMemberNamingConvention.SeparatorCharacterを使用してstring.Joinと呼び出します。次に、ソース・タイプ・メンバーを宛先タイプ・メンバーと照合しようとします。

これは機能の概要を説明するもので、完全な機能を説明するものではありません。これは単にINamingConventionの使用方法を示し、SourceMemberNamingConvention.SplittingExpressionDestinationMemberNamingConvention.SeparatorCharacterが決して使用されないことを示すためのものです。

この戦略を使用して宛先メンバーを変換できない場合は、手動でプロパティをマップする必要があります。nemesv's answerが示唆しているとおりです。

答えて

1

この機能は削除されています。GitHubを参照してください。質問更新後

EDITリライト:たぶんLowerUnderscoreNamingConventionに建て

はあなたの問題を解決します。それはあなたがそれがin the sourceを実現していますどのようにチェックして、独自のconvetionを作成することができ、すべてのケースをカバーしていない場合は

public class Source 
{ 
    public string test_this_prop { get; set; } 
    public string test_Another_Prop { get; set; } 
    public string test_wronglynamedprop { get; set; } 
} 

public class Dest 
{ 
    public string TestThisProp { get; set; } 
    public string TestAnotherProp { get; set; } 
    public string TestWronglyNamedProp { get; set; } 
} 

Mapper.Initialize(c => 
    c.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention()); 
Mapper.CreateMap<Source, Dest>(); 
var test = Mapper.Map<Dest>(
    new Source() { test_Another_Prop = "test", test_this_prop = "test" }); 

SourceDest: は、私はこのコードをテストしてみました。

EDIT:規則は手動で特殊なケースを上書きするためにフォールバックすることができます適用されません

:コメントの後

Mapper.CreateMap<Source, Dest>() 
    .ForMember(d => d.TestWronglyNamedProp, c => c 
    .MapFrom(s => s.test_wronglynamedprop)); 

私は現在のバージョンでは他のオプションを参照してくださいません。何も見ない限り、MemberNameTransformerが置き換えられます。

+0

はい、私はすでにそれを見ました。私は接頭辞や接尾辞で何もしないので、これは私を助けません。 – cadrell0

+0

達成しようとしていることを示す例を教えてください。 – nemesv

+0

私は質問を更新しました – cadrell0

関連する問題