AutoMapperを使用して、フラットなDataObjectからFat BusinessObjectに、またはその逆にマップしています。 BusinessObjectsの変更通知(カスタム検証によるINotifyPropertyChangedの実装など)が原因で、DataObjectsからBusinessObjectsへのマッピングに余分な時間がかかることに気付きました。
通常、マッピング中に変更通知は必要ないので、オフにしたいと思います。そこで、プロパティ「IsPropertyChangedEnabled」を追加しました。このプロパティがfalseに設定されている場合、NotifyPropertyChangedイベントは発生せず、時間が節約されます。
質問:
マッピングプロセスの最初にこのプロパティをfalseに設定するようにAutoMapperに指示できますか?もしそうなら、どうですか?
ありがとうございました!
マッピングプロセスの前にBeforeMap
メソッドを使用してプロパティ値を設定します。
Mapper.CreateMap<Source, Destination>()
.BeforeMap((s, d) => d.IsPropertyChangedEnabled = false );
値に設定されているプロパティがソースオブジェクトにない場合に、Mapper.AssertConfigurationIsValid()の標準単体テストに合格するという追加の利点を持つForMember()を使用することもできます。
ここに例があります
Mapper.CreateMap<ClientData, GenerateClientLetterCommand>()
.ForMember(x => x.Id, opt => opt.MapFrom( o => Guid.NewGuid()))
.ForMember(x => x.Created, opt => opt.MapFrom( o => DateTime.Now));
説明から私が理解していることから、DOを使用してBOにデータを入力し、dbからデータをフェッチしている間は、プロパティ変更通知を発行したくないということです。
このための1つの可能な解決策は、2つの主要な機能を持つすべてのBOの基本クラスを持つことです。1。プロパティ-IsLoaded。データが読み込まれた後にマッパーによって設定されます。 IsLoadedプロパティを確認し、それに基づいてイベントを発生させます。