390 Stimmen

Ignorieren Sie das Zuordnen einer Eigenschaft mit Automapper

Ich verwende Automapper und habe das folgende Szenario: Die Klasse OrderModel hat eine Eigenschaft namens "ProductName", die sich nicht in der Datenbank befindet. Wenn ich also versuche, das Mapping mit zu machen:

Mapper.CreateMap<OrderModel, Orders>(); 

Es wird eine Ausnahme erzeugt:

"Die folgenden 1 Eigenschaften von Project.ViewModels.OrderModel sind nicht zugeordnet: 'ProductName'

Ich habe gelesen bei AutoMapper's Wiki für Projektionen der umgekehrte Fall (das zusätzliche Attribut befindet sich am Zielort, nicht in der Quelle, was eigentlich mein Fall ist)

Wie kann ich vermeiden, dass automapper die Zuordnung dieser Eigenschaft vornimmt?

30voto

Loren Paulsen Punkte 8530

Bei der Rückführung eines Ansichtsmodells in ein Domänenmodell kann es sehr viel sauberer sein, einfach die Quellmitgliederliste statt der Zielmitgliederliste zu validieren

Mapper.CreateMap<OrderModel, Orders>(MemberList.Source); 

Jetzt schlägt meine Mapping-Validierung nicht mehr fehl und erfordert eine weitere Ignore() jedes Mal, wenn ich eine Eigenschaft zu meiner Domänenklasse hinzufüge.

3voto

Anthony Fleury Punkte 55

Es ist auch möglich, Eigenschaften wie diese global zu ignorieren:

  1. Die Verwendung des AddGlobalIgnore(string propertyNameStartingWith) Methode in der Mapperkonfiguration, um Eigenschaften zu ignorieren, deren Name mit einer bestimmten Zeichenfolge beginnt.
  2. Die Verwendung des ShouldMapProperty um ein Prädikat anzugeben und bedingt auszuwählen, welche Eigenschaften zugeordnet werden sollen. ShouldMapField et ShouldMapMethod Eigenschaften sind ebenfalls verfügbar.

Verwendung:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        // other configs...

        AddGlobalIgnore("foo")); // this will ignore properties with name starting with "foo"
        ShouldMapProperty = p => p.Name != "bar"; // this will ignore properties with name "bar"
    }
}

Oder :

var config = new MapperConfiguration(cfg => {
    // other configs...
    cfg.AddGlobalIgnore("foo"); // way 1
    cfg.ShouldMapProperty = p => p.Name != "bar"; // way 2
});

2voto

Naresh Punkte 2597

IgnoreAttribute für die Eigenschaft, die ignoriert werden soll, verwenden

-5voto

Hallo alle Bitte verwenden Sie diese es funktioniert gut... für Auto-Mapper verwenden mehrere .forMember in C#

        if (promotionCode.Any())
        {
            Mapper.Reset();
            Mapper.CreateMap<PromotionCode, PromotionCodeEntity>().ForMember(d => d.serverTime, o => o.MapFrom(s => s.promotionCodeId == null ? "date" : String.Format("{0:dd/MM/yyyy h:mm:ss tt}", DateTime.UtcNow.AddHours(7.0))))
                .ForMember(d => d.day, p => p.MapFrom(s => s.code != "" ? LeftTime(Convert.ToInt32(s.quantity), Convert.ToString(s.expiryDate), Convert.ToString(DateTime.UtcNow.AddHours(7.0))) : "Day"))
                .ForMember(d => d.subCategoryname, o => o.MapFrom(s => s.subCategoryId == 0 ? "" : Convert.ToString(subCategory.Where(z => z.subCategoryId.Equals(s.subCategoryId)).FirstOrDefault().subCategoryName)))
                .ForMember(d => d.optionalCategoryName, o => o.MapFrom(s => s.optCategoryId == 0 ? "" : Convert.ToString(optionalCategory.Where(z => z.optCategoryId.Equals(s.optCategoryId)).FirstOrDefault().optCategoryName)))
                .ForMember(d => d.logoImg, o => o.MapFrom(s => s.vendorId == 0 ? "" : Convert.ToString(vendorImg.Where(z => z.vendorId.Equals(s.vendorId)).FirstOrDefault().logoImg)))
                .ForMember(d => d.expiryDate, o => o.MapFrom(s => s.expiryDate == null ? "" : String.Format("{0:dd/MM/yyyy h:mm:ss tt}", s.expiryDate))); 
            var userPromotionModel = Mapper.Map<List<PromotionCode>, List<PromotionCodeEntity>>(promotionCode);
            return userPromotionModel;
        }
        return null;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X