2016-05-19 8 views
3

Ich habe kürzlich angefangen, Automapper zu verwenden. Ich habe eine große Datenbanktabelle mit 50 Eigenschaften. Ich möchte Update-Tabelle mit Automapper, aber nur wenige ausgewählte Eigenschaften werden mit Viewmodel übergeben.Aktualisieren von nur wenigen Eigenschaften mit dem Automapper

Um meine Frage einfach zu machen, schrieb ich kleine Konsole Programm.

internal class Person 
{ 
    public string FirstName { get; set; } 
    public string NickName { get; set; } 
    public string LastName { get; set; } 
} 

internal class PersonContract 
{ 
    public string FirstName { get; set; } 
    public string NickName { get; set; } 
    public string LastName { get; set; } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 

     PersonContract Person1 = new PersonContract { NickName = "Dan", LastName = "Smith" }; 
     Person Person2 = new Person { FirstName = "Robert", NickName = "Rob" }; 

     Mapper.CreateMap<PersonContract, Person>(); 


     Mapper.Map(Person1, Person2); 

     Console.WriteLine(Person2.FirstName); 
     Console.WriteLine(Person2.NickName); 
     Console.WriteLine(Person2.LastName); 

     Console.ReadLine(); 
    } 
} 

Meine Ausgabe ist NULL Dan Smith

Ich erwartete Robert Dan Smith

Denn wenn Person1 nicht "Vorname" passing dann Person2 alten Wert behalten sollte. Offensichtlich verstehe ich es nicht richtig. Kann jemand dieses Problem erklären? Und lassen Sie mich wissen, wie ich die Ausgabe bekomme, die ich erwartet habe. mit ForAllMembers und Condition Methoden

Antwort

3

standardmäßig AutoMapper wird alle Eigenschaften kopieren, ob sie null ist oder nicht, aber Sie können eine Bedingung, die von allen Mitgliedern erfüllt werden eingestellt.

In Ihrem Fall, dass Sie für IsSourceValueNull Eigenschaft überprüfen:

Mapper.CreateMap<PersonContract, Person>() 
     .ForAllMembers(cfg => cfg.Condition(rc => !rc.IsSourceValueNull)); 
+0

Perfekt! Danke dafür. Ich wusste, dass es einen einfachen Weg dafür geben muss. – viks

+0

Schöne, schnelle, richtige Antwort. Gut gemacht!! –

Verwandte Themen