Kann 'nicht scheinen, dieses herauszufinden.Automapper Karte von innerem Eigentum zu Bestimmungsortklasse
Ich muss von SourceClass.InnerValue direkt auf DestinationClass zuordnen. Wie mache ich das?
Vielen Dank im Voraus.
Kann 'nicht scheinen, dieses herauszufinden.Automapper Karte von innerem Eigentum zu Bestimmungsortklasse
Ich muss von SourceClass.InnerValue direkt auf DestinationClass zuordnen. Wie mache ich das?
Vielen Dank im Voraus.
Wie üblich, gleich nachdem ich Post Frage Knopf drücken:
Mapper.Reset();
// from, to
Mapper.CreateMap<InnerValue, DestinationClass>();
Mapper.CreateMap<SourceClass, DestinationClass>()
.ConvertUsing(s => Mapper.Map<InnerValue, DestinationClass>(s.Inner));
Mapper.AssertConfigurationIsValid();
var source = new SourceClass() { Inner = new InnerValue() { InnerPropertyId = 123, StringValue = "somethinges" } };
var dest = Mapper.Map<SourceClass, DestinationClass>(source);
Mapping sollte sieht wie folgt aus:
CreateMap<SourceClass, DestinationClass>()
.ForMember(x => x.InnerPropertyId , x => x.MapFrom(z => z.Inner.InnerPropertyId))
.ForMember(x => x.StrignValue , x => x.MapFrom(z => z.Inner.StrignValue))
;
wir ein Problem mit dem ConvertUsing nicht über das voll bestückte Ergebnis geben, weil unsere Version von SourceClass hatte einen zusätzlichen Wert, den wir der DestinationClass zuordnen wollten
Wir fanden, dass der folgende Code das gewünschte Ergebnis ergab lt:
{
...
Mapper.CreateMap<InnerValue, DestinationClass>(MemberList.Source);
Mapper.CreateMap<SourceClass, DestinationClass>(MemberList.Source)
.ConstructUsing(s => Mapper.Map<DestinationClass>(s.Inner))
.ForSourceMember(m => m.Inner, opt => opt.Ignore());
...
}
public class DestinationClass
{
public int InnerPropertyId { get; set; }
public string StringValue { get; set; }
public string SourceClassValue { get; set; }
}
public class SourceClass
{
public string SourceClassValue { get; set; }
public InnerValue Inner { get; set; }
}
public class InnerValue
{
public int InnerPropertyId { get; set; }
public string StrignValue {get;set;}
}
ConstructUsing weiterhin die übrigen Mitglieder zur Karte, nachdem er die inneren Elemente zugeordnet hat und ConvertUsing nicht.
Das ist wirklich nett, aber ein Problem: Konfigurationsvalidierung schlägt fehl, da Zielmember aus 'Mapper.Map
gemeldet Ich habe die Antwort aktualisiert, um Ihr Problem zu lösen. Die "MemberList.Source" ist der Schlüssel und reduziert die Anzahl der Ignorierungen, die notwendig sind. –
In meinem Verständnis vernachlässige es Verweigerung der Zielmitglieder, die für meinen Fall nicht erlaubt ist. Was ich begehre, ist die Verifizierung, die einige Zielmitglieder verstehen kann, die bereits von 'ConstructUsing' gemappt wurden und weiterhin die restlichen Mitglieder verifizieren. Ich denke, das ist nicht möglich, da 'ConstructUsing' zur Laufzeit auflöst. Also meine Schlussfolgerung für jetzt ist, wie in Ihrer Antwort zu tun und einen Ergänzungstest hinzuzufügen. Vielen Dank! – qtuan
Sieht gut aus :) Allerdings ist das manuelle Konfigurieren jeder Requisite genau das, was ich vermeiden wollte ... – b0rg