2017-08-10 79 views
0

我的Company对象有一个列表Employees,而我的Payroll对象有一个列表EmployeesAutomapper创建一个对象的两个实例

在我的DTO中,我们假设companypayroll都共享同一个employee(只有一个员工对象)实例。

当我与AutoMapper将它们映射:该雇员对象的

 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); 

两个单独的实例被创建,因此:

company.Employee != payRoll.Employee 

他们在性能相同,但不是同一个实例。

这使事情变得非常尴尬,因为它们是DAL中的同一个对象(并且需要与业务层中的对象相同)。

我可以阻止AutoMapper创建同一个对象的两个实例吗?

+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

相关问题