Ich verwende Automapper und habe das folgende Szenario: Class OrderModel hat eine Eigenschaft namens 'ProductName', die nicht in der Datenbank enthalten ist. Wenn ich also versuche, das Mapping durchzuführen mit:
Mapper.CreateMap<OrderModel, Orders>();
Es wird eine Ausnahme generiert:
"Die folgenden 1 Eigenschaften von Project.ViewModels.OrderModel sind nicht zugeordnet: 'ProductName'
Ich habe im AutoMapper-Wiki für Projektionen den umgekehrten Fall gelesen (das zusätzliche Attribut befindet sich am Ziel, nicht in der Quelle, die eigentlich mein Fall ist).
Wie kann ich vermeiden, dass Automapper die Zuordnung dieser Eigenschaft vornimmt?
Antworten:
Von Jimmy Bogard:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Es ist in einem der Kommentare in seinem Blog .
quelle
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
könnte nützlich seinCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
?Ignore()
die korrekte Syntax erhalten bleibt. Dies liegt daran, dass die Syntaxänderung fürIgnore
auf derISourceMemberConfigurationExpression
Schnittstelle vorgenommen wurde, nicht jedoch auf der disjunktenIMemberConfigurationExpression`3
Schnittstelle.Ich bin vielleicht ein bisschen ein Perfektionist; Ich mag die ForMember (..., x => x.Ignore ()) - Syntax nicht wirklich. Es ist eine kleine Sache, aber es ist mir wichtig. Ich habe diese Erweiterungsmethode geschrieben, um sie ein bisschen schöner zu machen:
Es kann wie folgt verwendet werden:
Sie könnten es auch umschreiben, um damit zu arbeiten
params
, aber ich mag das Aussehen einer Methode mit vielen Lambdas nicht.quelle
params
: Sie könnten eine Reihe von Selektoren aus einem einzelnen Lambda zurückgeben und dann jeden Selektor mitforeach
oderSelect()
vielleicht nicht weniger chaotisch abbilden .Du kannst das:
quelle
Nur für alle, die dies automatisch versuchen, können Sie diese Erweiterungsmethode verwenden, um nicht vorhandene Eigenschaften des Zieltyps zu ignorieren:
wie folgt zu verwenden:
danke an Can Gencer für den Tipp :)
Quelle: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
quelle
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
Quelle verwendenEs gibt jetzt (AutoMapper 2.0) ein
IgnoreMap
Attribut, das ich anstelle der fließenden Syntax verwenden werde, die meiner Meinung nach etwas schwer ist.quelle
IgnoreMapAttribute
.Wenn Sie ein Ansichtsmodell wieder einem Domänenmodell zuordnen, kann es viel sauberer sein, einfach die Quellmitgliedsliste und nicht die Zielmitgliedsliste zu überprüfen
Jetzt schlägt meine Zuordnungsüberprüfung nicht fehl und erfordert
Ignore()
jedes Mal eine andere , wenn ich meiner Domänenklasse eine Eigenschaft hinzufüge.quelle
Könnte IgnoreAttribute für die Eigenschaft verwenden, die ignoriert werden muss
quelle
[IgnoreMap]
vonIgnoreMapAttribute
Hallo an alle, bitte benutze dies, es funktioniert gut ... für Auto Mapper benutze mehrere .ForMember in C #
quelle