Automapper geschachtelten mapping
Ich habe gelesen, die geschachtelten mapping-wiki-Seite, aber es scheint nicht, wie mehrere Ebenen verschachteln. Ich habe die folgenden Karten erstellt und Klassen definiert.
AutoMapper.Mapper.CreateMap<Address, AddressDTO>();
AutoMapper.Mapper.CreateMap<MatchCompanyRequest, MatchCompanyRequestDTO>();
public class MatchCompanyRequest
{
Address Address {get;set;}
}
public class MatchCompanyRequestDTO
{
public CompanyInformationDTO {get;set;}
}
public class CompanyInformationDTO {get;set;}
{
public string CompanyName {get;set;}
public AddressDTO Address {get;set;}
}
Aber den folgenden code...
//works
matchCompanyRequestDTO.companyInformationDTO.Address =
AutoMapper.Mapper.Map<Address, AddressDTO>(matchCompanyRequest.Address);
//fails
matchCompanyRequestDTO =
AutoMapper.Mapper
.Map<MatchCompanyRequest, MatchCompanyRequestDTO>(matchCompanyRequest);
Nicht dieses Tiefe verschachteln Arbeit und ich habe es nicht richtig konfiguriert? Oder ist diese Art der Verschachtelung noch nicht unterstützt?
-- Edit
Für alle interessierten, ich bin nicht in der Steuerung des DTOs.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es fehlt die Zuordnung von Adresse zu
CompanyInformationDTO
, wie die Objekte sich auf der gleichen Netz-Niveau.Die Karte ist erstellt für
MatchCompanyRequest
->MatchCompanyRequestDTO
, aber es ist nicht in der Lage, um herauszufinden, ob Sie können die KarteAddress
zuCompanyInformationDTO
.Damit Ihre
MatchCompanyRequestDTO
könnte in der Tat haben die gleiche Erklärung wie IhrCompanyInformationDTO
:Diese natürlich wirkt sich nur auf Sie, wenn Sie wollen, um die automatische Zuordnung verwenden. Sie noch konfigurieren, können Sie Ihre Karten manuell, aber es scheint, wie die DTOs, die behoben werden sollte, anstatt, versuchen wir ' s trotzdem:
Mapper
Instanz?AutoMapper.Mapper
? Ich weiß wirklich nicht - schon seit Jahren habe ich verwendet AutoMapper...CreateMap
auf Ihre eingefügte Instanz und der rest bleibt gleich...CreateMap
auf Ihre eingefügte Instanz, die Sie ein Profil erstellen, und rufen SieCreatMap
innerhalb, dass, wie es erbt vonProfile
. In der resolver, die Sie nicht haben Zugriff auf die Instanz injiziert.Das wichtigste ist, legen Sie fest, wie tiefer ist die navigation, um previne stackoverflow Probleme. Stellen Sie sich diese Möglichkeit:
Den code unten sehen Sie eine Problemumgehung zum beheben dieses für alle Mapper. Wenn Sie möchten, können definiert werden, um die einzelnen mapper. Wie diese Frage
Lösung 1 (Globale Definition)
Lösung 2 (Für jeden Mapper)
Betrachten Sie den folgenden statt:
Ihre DTO-Objekte müssen die gleiche Struktur wie Ihre domain-Objekte für die Standard-mapping-Konventionen Arbeit in AutoMapper.
Schau mal hier: https://github.com/AutoMapper/AutoMapper/wiki/Projection wird erklärt, die Projektion, man könnte es anpassen, um zu arbeiten, wie Sie es haben.