2016-08-02 10 views
0

In meinem Projekt muss ich Objekte von externen Systemen DTOs zuordnen. Das Objekt, das ich abbilden wollen ist:Ordnen Sie eine Klasse zu, die eine Liste von Objekten an eine ähnliche Klasse erbt.

public class PriceLists : List<PriceList> { } 

ich die Idee der Abbildungseigenschaften innerhalb der Klasse erhalten, aber Schwierigkeiten haben, eine Lösung für diesen Fall zu finden. Mein DTO wird vorzugsweise „identisch“ zu dieser Quellenklasse, es so einfach wie möglich für den Moment zu machen:

public class PriceListsDTO : List<PriceListDTO> { } 

Gibt es eine einfache Lösung oder muss ich meine DTO Objekt Refactoring?

Danke.

Bearbeiten: Ich habe versucht, Mapping für eine Liste von Preislisten ohne Erfolg in Bezug auf dieses Problem zu erstellen.

Mapper.Initialize(cfg => { cfg.CreateMap<PriceList>, <PriceListDTO>(); }); 

Mapper.Initialize(cfg => { cfg.CreateMap<IList<PriceList>, IList<PriceListDTO>>(); }); 

Edit2:

public class PriceList 
{ 

    public string Agreement { get; set; } 

    public Currency Currency { get; set; } 

    public string Description { get; set; } 

    public Nullable<DateTime> EndDate { get; set; } 

    public int Id { get; set; } 

    public Nullable<Guid> ImageKey { get; set; } 

    public bool IsBid { get; set; } 

    public bool IsLimitedToStock { get; set; } 

    public bool IsPrimary { get; set; } 

    public bool IsPublic { get; set; } 

    public string Name { get; set; } 

    public Nullable<DateTime> StartDate { get; set; } 

    public int Type { get; set; } 
} 

public class PriceListDTO 
{ 
    public string Agreement { get; set; } 

    public CurrencyViewModel Currency { get; set; } 

    public string Description { get; set; } 

    public DateTime? EndDate { get; set; } 

    public int Id { get; set; } 

    public Guid? ImageKey { get; set; } 

    public bool IsBid { get; set; } 

    public bool IsLimitedToStock { get; set; } 

    public bool IsPrimary { get; set; } 

    public bool IsPublic { get; set; } 

    public string Name { get; set; } 

    public DateTime? StartDate { get; set; } 

    public int Type { get; set; } 
} 

Und die Währungsklasse und DTO enthält nur String-Eigenschaften.

+0

zeigen Sie Preisliste und pricelistdto Klasse. einige Probleme nur in Klassen –

+0

Aktualisierter Beitrag mit den von dir gewünschten Klassen, Pankaj. –

+0

laufen immer 'cfg.AssertConfigurationIsValid()' am Ende Ihrer Initialisierung zu überprüfen, es – Eris

Antwort

0

Aus dem Code, den Sie angegeben haben, haben Sie AutoMapper nie dazu aufgefordert, das DTO mit der Modellklasse zu verknüpfen. Wenn Sie zweimal Initialize aufrufen, entfernt die zweite jede vorherige Zuordnung. Versuchen Sie die Aktualisierung Ihrer Konfiguration folgendes zu tun:

Mapper.Initialize(cfg => { 
    cfg.CreateMap<PriceList, PriceListDTO>() 
     .ReverseMap(); 
    // Not sure if this is required if you already have the model/dto map 
    cfg.CreateMap<IList<PriceList>, IList<PriceListDTO>>(); 
    cfg.AssertConfigurationIsValid(); 
}); 
+0

Ok, ich glaube, ich habe einige Fortschritte nun mit einer Fehlermeldung ... AutoMapper.AutoMapperConfigurationException. Unmapped Mitglieder gefunden. Überprüfen Sie die folgenden Typen und Mitglieder. Hinzufügen eines benutzerdefinierten Zuordnungsausdrucks, Ignorieren, Hinzufügen eines benutzerdefinierten Resolvers oder Ändern des Quell-/Zieltyps ============================= ============================ Preisliste -> PreislisteListViewModel (Ziel Mitgliederliste) Korrigieren Sie mich, wenn ich ' m falsch: 1. Ich sollte die ILists nicht noch einmal abbilden? 2. Ich muss ReverseMap auf alle Objekte, die ich habe? 3. Zum Beispiel: Währung sollte "wie üblich" innerhalb der –

+0

abgebildet werden "ReverseMap" sollte nur für Klassen verwendet werden, die bidirektionales Mapping erfordern. Da Automapper die angeborene Fähigkeit hat, mit Sammlungen umzugehen, denke ich, dass es nur die tatsächlichen Objektkarten benötigt. – Eris

+0

Für den Fehler müssen Sie auch untergeordnete Typen zuordnen, wie 'Currency, CurrencyViewModel' und alle anderen, die nicht in den obigen Codeblöcken enthalten sind. – Eris

0
public class PriceList 

{

public string Agreement { get; set; } 

public Currency Currency { get; set; } 

public string Description { get; set; } 

public Nullable<DateTime> EndDate { get; set; } 

public int Id { get; set; } 

public Nullable<Guid> ImageKey { get; set; } 

public bool IsBid { get; set; } 

public bool IsLimitedToStock { get; set; } 

public bool IsPrimary { get; set; } 

public bool IsPublic { get; set; } 

public string Name { get; set; } 

public Nullable<DateTime> StartDate { get; set; } 

public int Type { get; set; } 

}

public class PriceListDTO { public string Abkommen {get; einstellen; }

public Currency Currency { get; set; } 

public string Description { get; set; } 

public DateTime? EndDate { get; set; } 

public int Id { get; set; } 

public Guid? ImageKey { get; set; } 

public bool IsBid { get; set; } 

public bool IsLimitedToStock { get; set; } 

public bool IsPrimary { get; set; } 

public bool IsPublic { get; set; } 

public string Name { get; set; } 

public DateTime? StartDate { get; set; } 

public int Type { get; set; } 

}

danach versuchen, es automapper.mapper.createmap für Sie arbeiten wird sonst müssen Sie formember Methode verwenden Eigenschaften von Währung mit currencyviewmodel eins nach dem anderen, weil Objekt zur Karte sind voneinander verschieden, versuche es einfach. hoffe, es hilft für Sie. Danke

+0

Ich habe die Währung -> currencyviewmodel vor der Preisliste abgebildet. –

+0

Es ist nicht wichtig, früher oder nicht zu kartografieren, wenn Sie mit Preisliste und Preislist arbeiten und Sie Währungsmodell verwenden, müssen Sie dort auch zuordnen, denke ich. –

Verwandte Themen