Ich habe eine einfache Update-Funktion:Automapper - Kann es nur vorhandene Eigenschaften in Quell- und Zielobjekten abbilden?
public void Update(Users user)
{
tblUserData userData = _context.tblUserDatas.Where(u => u.IDUSER == user.IDUSER).FirstOrDefault();
if (userData != null)
{
Mapper.CreateMap<Users, tblUserData>();
userData = Mapper.Map<Users, tblUserData>(user);
_context.SaveChanges()
}
}
Userdata ist eine EF Einheit, und es ist Entity Key-Eigenschaft wird auf Null gesetzt, weil, wie ich glaube, es existiert im Zielobjekt, aber nicht in dem Quellobjekt, so Es wird über mit seinem Standardwert (für den Entitätsschlüssel, das ist null) überbrückt
Also, meine Frage ist kann Automapper konfiguriert werden, um nur versuchen, die Eigenschaften, die in der Quelle und Zielobjekte existieren zuordnen? Ich möchte, dass Dinge wie der Entitätsschlüssel und die Navigationseigenschaften übersprungen werden.
Richtig, aber ich muss explizit die Liste der Eigenschaften für jede meiner Entitäten zu ignorieren. Was für mich in meinem Fall schön wäre, wäre eine Möglichkeit, das "gierige" Mapping auszuschalten und AutoMapper die Eigenschaften der Quell- und Zielobjekte vergleichen zu lassen und nur die Eigenschaften zu mappen, die in beiden existieren. Ich habe in den Dokumenten keine solche Option gesehen, also dachte ich, ich würde sie hier fragen, aber ich glaube nicht, dass AutoMapper sich so verhält. –
Ich verstehe die Regel, die Sie anwenden möchten: "Wenn meine Quelleigenschaft nicht null ist und meine Zieleigenschaft nicht null ist, ordnen Sie die Quelle dem Ziel zu", aber ich denke nicht, dass es möglich ist, diese Logik global auf alle anzuwenden Eigenschaft in einem Mapping, ohne explizit eine Bedingung für jedes zu erstellen, wie ich oben getan habe. – CSL
Die Regel, die ich anwenden möchte, lautet: "Wenn meine Quelleigenschaft im Ziel vorhanden ist, ordnet die Quelle dem Ziel zu und ignoriert alle anderen Eigenschaften im Ziel", aber ich glaube, Sie haben Recht, ich müsste die Ignorierung erstellen Bedingungen, wie Sie angegeben haben. –