2016-05-25 4 views
2

私はこのクラスを持っています。 Tはbool Equals(object obj)int GetHashCode()IEquatable<SyncObject>を実装クラス内の同じオブジェクトタイプのプロパティをマッピングすると、EqualsとGetHashCodeが呼び出されます

public class ConflictItem<T> where T : new() 
    { 
     public T CurrentItem { get; set; } 
     public T RequestedUpdateItem { get; set; } 
    } 

IEnumerable<ConflictItem<Order>>があり、IEnumerable<ConflictItem<OrderDataObject>>にマップされているとします。これは理由を理解できないEqualsとGetHashCodeを呼び出します。

問題は、マップされた結果オブジェクトConflictItem<OrderDataObject>が、CurrentItemプロパティとRequestedUpdateItemプロパティの両方で同じオブジェクトインスタンスで終わることです。

私の簡単なAutomapperの設定。

config.CreateMap<ConflictItem<Order>, ConflictItem<OrderDataObject>>().ReverseMap(); 
config.CreateMap<Order, OrderDataObject>().ReverseMap(); 

それはリストまたは2つのオブジェクト間のオブジェクトの平等に来るとき、私は理解しますが、なぜAutomapperは、別のオブジェクトに2つの異なる性質のために平等にマッチしますか?設定でこの動作を無効にする方法はありますか?

+0

はこれだけではなく、根本的なコレクションそのものですか? – BlakeH

+0

私は問題を更新して、両方のプロパティで同じオブジェクトインスタンスを持つConflictItem を受け取ることになりました。 –

+0

'Equals'を呼び出すと、2つのプロパティがどのように変化しますか?私はあなたが実際に悪いマッピング設定を持っていると思う。あなたはどのようにマップし、どこに 'Equals'が呼ばれているのかを表示できますか? –

答えて

1

ライブラリがマップ方式のオプションとしてキャッシュを無効にするオプションを追加したようだ:

var output = Mapper.Map<T1, T2>(input, opt => opt.DisableCache = true); 

ことを試してみて、それがあなたの問題を解決するかどうかを確認します。

私はGitHubの上の5.0ベータ版を見てきた、そしてそれは彼らが、デフォルトでは、このキャッシュを無効にするかもしれないようだ。

https://github.com/AutoMapper/AutoMapper/releases/tag/v5.0.0-beta-1

+0

最新のNugetパッケージのバージョンでは、デフォルトのキャッシュ動作が変更されているようです。 https://github.com/AutoMapper/AutoMapper/issues/1311 –

関連する問題