2016-11-14 7 views
0

v4.2からAutoMapper 5.1にアップグレードしようとしていて、コレクションが実行時にマッピングされていないことがわかっています - ソースオブジェクトはコレクションにアイテムを持っています。同じマッピングの設定で、予想通り4.2の下でネストされたコレクションがAutoMapper 5.1で機能していない

、すべてが

(CreateMap()ctorの中MemberList.Noneのために保存)を正確に働いていた私のようなので、

public class GeographicEntity 
{ 
... 
} 

public class County : GeographicEntity 
{ 
    ... 
} 

public class State : GeographicEntity 
{ 
    public List<County> Counties { get; } = new List<County>(); 
} 

とのviewmodelsのようなのDTOを持っていますそう

のようなので、

public class GeographicEntityViewModel 
{ 
    ... 
} 

public class CountyViewModel : GeographicEntityViewModel 
{ 
    ... 
} 

public class StateViewModel : GeographicEntityViewModel 
{ 
    public List<CountyViewModel> Counties { get; } = new List<CountyViewModel>(); 
} 

とマッピングの確認

Mapper.Map <>呼び出した後、StateViewModelの郡収集は、ソースオブジェクトがその.Countiesコレクション内のアイテムがあっても(0アイテムとリスト)が空である:

var st = new State() 
... (initialize the state, including the .Counties list) 
var stateViewModel = Mapper.Map<StateViewModel>(st); 

任意の手がかりありがとう!

答えて

0

いくつかの調査の後、AutoMapper 5のアップグレードでいくつかの大きな変更が導入されたことが判明しました。具体的には、宛先コレクションにgetterが設定されているがsetterがない場合のように、動作が変更されています。 AutoMapper 4では、デフォルトの動作では、新しいインスタンスを作成するのではなく、デフォルトでdestinationプロパティを使用しました。 AutoMapper 5はデフォルトでそれをしません。

ソリューションは、明示的に先の値を使用するようにAutoMapperを伝えることです:

.ForMember(dest => dest.Counties, o => o.UseDestinationValue()) 

私はこのような互換性に影響する変更を導入するための十分な理由があると確信している、しかし、あなたは「とき、それは心痛の終わりを引き起こしません幅広いパターンを実装し、この変更の影響を受ける可能性があるすべてのマップされたオブジェクトを探して修正する必要があります。

Automapper 4.2でアップグレードに賭けて欲しいと思っています。余分な不要な設定がなくても、まさに私が必要としていたものです。

詳細については、https://github.com/AutoMapper/AutoMapper/issues/1599

を参照してください。
関連する問題