2016-04-12 5 views
5

Ich verwende den AutoMapper mit Profilen und es funktioniert sehr gut. Vor kurzem fand ich die CreateMissingTypeMaps-Konfiguration und, wenn es funktioniert, wie ich verstehe, wird meine Entwicklung schneller machen, ein Mal, das nicht notwendig sein wird, einfache Zuordnungen zu erstellen.AutoMapper mit CreateMissingTypeMaps und AddProfile

Ich habe zu meiner Konfiguration ein Profil mit AddProfile hinzugefügt, und danach habe ich die CreateMissingTypeMaps-Konfiguration.

Ex:

------- Erstellen Konfiguration ------------

var config = new MapperConfiguration(cfg => 
{ 
    cfg.AddProfile<PersonServiceMapperProfile>(); 
    cfg.CreateMissingTypeMaps = true; 
}); 

------- Inside my PersonServiceMapperProfile - ----

internal class PersonServiceMapperProfile : Profile 
{ 
    protected override void Configure() 
    { 
     CreateMap<PersonData, ProfileViewModel>().ConvertUsing<PersonDataToProfileViewModel>(); 
    } 
} 

Wenn die CreateMissingTypeMaps Konfiguration auf true gesetzt ist, mehr das Profil nicht funktioniert. Meine benutzerdefinierte Zuordnung wird nicht aufgerufen.

Wie löst man diese Frage?

+0

Ist das immer noch passiert? – Brad

+1

@Brad Ich habe gerade von v3.3 auf v6 aktualisiert, und es passiert mir. Ich versuche herauszufinden, wie ich DynamicMap an so vielen Orten benutze, dass ich mich nicht mehr mit einer CreateMap beschäftigen muss (ich hätte buchstäblich 100 leere CreateMap-Aufrufe). Ich werde hier zurück posten, wenn ich es herausgefunden habe ... – pbarranis

Antwort

0

Ich lief in das gleiche Problem nach dem vor kurzem von AutoMapper 3 bis 6 aktualisieren, und ich fand eine Ausgabe in GitHub für AutoMapper, die die Lösung für dieses Problem offenbart:

Die AddConditionalObjectMapper() ist der Weg zu Gehen Sie so vor, dass Ihre Anontypen zwar zugeordnet sind, Ihre Standardzuordnungen jedoch nicht überschrieben werden. Verwenden Sie das nicht mit CreateMissingtypeMaps, da dies die Bedingung überschreibt. CreateMissingTypeMaps ist grundsätzlich AddConditionalObjectMapper(). Wobei ((s, d) => true);

Source: Issue 2008, TylerCarlson1

Dies ist jedoch nicht für "einfache Zuordnungen" verwendet werden soll. Die CreateMissingTypeMaps-Funktion ist nur für die Verwendung vorgesehen, wenn die Zuordnungen erst zur Kompilierungszeit bekannt sind, z. B. mit EF Dynamic Proxies. Der Grund, warum es nicht für bekannte Typen verwendet werden sollte, ist, dass die CreateMap- und Kompilierungsfunktionen es Ihnen ermöglichen, fehlerhafte Zuordnungen schnell zu testen und zu verhindern, aufgrund von Tippfehlern, nicht übereinstimmenden Namen, neuen oder entfernten Eigenschaften usw. Es ist eine große Sache, die Kompilierungsfunktion wie beabsichtigt, also machen Sie das Beste daraus.