AutoMapper Zuordnung einer Eigenschaft einer nullable-Eigenschaft
Wie kann man das zuordnen einer Eigenschaft zu einer sub-Eigenschaft kann null sein?
zB der folgende code wird nicht mit einer NullReferenceException, weil der Kontakt in den Benutzer-Eigenschaft ist null.
using AutoMapper;
namespace AutoMapperTests
{
class Program
{
static void Main( string[] args )
{
Mapper.CreateMap<Contact, ContactModel>()
.ForMember( x => x.UserName, opt => opt.MapFrom( y => y.User.UserName ) );
Mapper.AssertConfigurationIsValid();
var c = new Contact();
var co = new ContactModel();
Mapper.Map( c, co );
}
}
public class User
{
public string UserName { get; set; }
}
public class Contact
{
public User User { get; set; }
}
public class ContactModel
{
public string UserName { get; set; }
}
}
Möchte ich ContactModel Benutzername standardmäßig ein leerer string statt.
Habe ich versucht das NullSubstitute Methode, aber ich nehme an, die versucht, den Betrieb mit Benutzer.Benutzername, anstatt nur auf die User-Eigenschaft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie schreiben, der mapping-code wie folgt:
Dieser wird prüfen, ob die
User
null ist oder nicht, und weisen Sie dann entweder eine leere Zeichenfolge oder derUserName
.Wenn Sie finden, sich selbst dabei eine Menge von null-Prüfung, wie in Dave ' s Antwort, könnten Sie in Betracht ziehen anwenden der Technik habe ich gebloggt vor einer Weile: Loswerden von null-Prüfungen im Eigentum Ketten. Dies ermöglicht es Ihnen, dies zu schreiben:
?? string.Empty
Stück oben benötigt? Ich habe gesehen, wie einige Beispiele in Ihrem Artikel, wo man nur dieopt.NullSafeMapFrom
Stück?? string.Empty
ist nicht notwendig, es ist nur ein bequemer Weg, um sicherzustellen, das Ergebnis ist nienull
.Einer Lösung, die ich verwendet habe, ist zum erstellen einer Schließung rund um die original-Delegierten, die wickelt es in ein try/catch-block. Es ist leider notwendig, um
Expression.Compile()
zu stoppen Visual Studio aus die exception zu fangen, wenn es geworfen in den ursprünglichen delegieren. Wahrscheinlich nicht empfohlen, in high-performance-Umgebungen, aber ich hatte nie ein Problem mit es in regelmäßigen UI-Sachen. Ihre Laufleistung variieren kann.Erweiterung Methode
Nutzung
Expression.Compile()
nennen können weitgehend gemildert durch die Anwendung ein caching-Mechanismus. Die try-catch ist ein größeres problem ist allerdings, performance-wise. Aber wie du schon sagtest, wenn man nur gelegentlich (anders als in großen Schleifen), es sollte kein problem sein.