2017-08-10 12 views
0

私のCompanyオブジェクトはEmployeesのリストを持ち、私のPayrollオブジェクトはEmployeesのリストを持っています。Automapperは1つのオブジェクトの2つのインスタンスを作成します

私のDTOでは、companypayrollの両方が同じemployeeのインスタンスを共有しているとしましょう(従業員オブジェクトは1つだけです)。

company.Employee != payRoll.Employee 

彼らは性質は同じだが、ない同じインスタンス:ので、その従業員オブジェクトの

 var config = new MapperConfiguration(cfg => { 
      cfg.CreateMap<DTOBusiness, Business>(); 
      cfg.CreateMap<DTOCompany, Company>(); 
      cfg.CreateMap<DTOPayRoll, PayRoll>(); 
      cfg.CreateMap<DTOEmployee, Employee>(); 
     }); 

     var business = config.CreateMapper().Map<Business>(dtoBusiness); 

2つの別々のインスタンスが作成されます。

私はAutoMapperでそれらをマップします。

これはDAL内の同じオブジェクトであり(ビジネスレイヤー内の同じオブジェクトである必要があるため)、非常に扱いにくいものになります。

AutoMapperが同じオブジェクトの2つのインスタンスを作成しないようにすることはできますか?

+0

これは暗闇の中のちょっとしたショットです:AutoMapper.Collection(https://github.com/AutoMapper/AutoMapper.Collection)やその他の拡張機能を使用することを検討したことがありますか(ORMでこれを使用しているとします)? – JZimmerman

+0

良い叫び声ですが、私も実際に試してみましたが(IDでEqualityComparisonを使用しています)、オブジェクトに複数の親がある場合でも、それぞれの親に対して別のインスタンスが作成されているようです。 – FBryant87

+0

これを発見しました。条件に基づいたマッピング:[link](https://stackoverflow.com/questions/2451189/automapper-ignore-on-condition-of)..おそらく 'company.Employee == payRoll。従業員は地図をスキップしますか? –

答えて

1

マップにPreserveReferencesを設定する必要があります。再帰を防ぐためにのみ自動的に設定されます。それは私が推測するところでは当てはまりません。 The docs

+0

を実装する方が良いでしょう。インスタンスは実際には異なります。 – DavidG

+0

それはそれを固定しました、ありがとう! @DavidGこの場合、マッピングの前に別のものではなく、ただ一つのインスタンスです。 – FBryant87

関連する問題