Automapper des objets complexes
J'ai commencé à mettre en œuvre la présente;
Automapper, la cartographie d'un objet complexe mais pensé il doit y avoir une meilleure façon.
J'ai donc créé ce;
Mapper.CreateMap<StoreTransportWindow, CSVWindow>()
.ForMember(dest => dest.DC, opt => opt.ResolveUsing(fa => fa.DC.number))
.ForMember(dest => dest.Type, opt => opt.ResolveUsing(fa => fa.Type))
;
Mapper.CreateMap<Store, CSVStore>()
.ForMember(dest => dest.StoreName, opt => opt.ResolveUsing(fa => fa.name))
.ForMember(dest => dest.StoreNumber, opt => opt.ResolveUsing(fa => fa.number))
;
Maintenant, je voudrais utiliser le haut des mappages dans le primaire carte;
Mapper.CreateMap<Store, CSVLineObject>()
.ForMember( dest => dest.store, opt => opt.ResolveUsing(/* This is where I'd like to use the above Store to CSVStore mapping */))
;
Est-ce possible?
modifier
public class CSVStore
{
public string StoreNumber { get; set; }
public string StoreName { get; set; }
}
public class CSVWindow
{
public string Type { get; set; }
public string DC { get; set; }
public string TPC { get; set; }
public class CSVLineObject
{
public CSVStore store { get; set; }
public List<CSVWindow> storeWindows { get; set; }
- Pouvez-vous montrer ce que vous essayez de carte? (c'est à dire, qu'est-ce que
CSVLineObject
, et quel est le type dedest.store
). Notez également qu'il semble que vous devriez être en utilisantMapFrom
au lieu deResolveUsing
, et la deuxième propriété dans la première cartographie (dest.Type
) est automatiquement adressé par la convention. - voir mon edit
- Quoi de
Store
? J'essaie de savoir pourquoi vous êtes la cartographieStore
àCSVLineObject
au lieu de faire quelque chose commeCSVLineObject.store = Mapper.Map<Store, CSVStore>(store)
. Je suppose que si vous vouliez vous pourriez faire quelque chose commeMapper.CreateMap<Store, CSVLineObject>().ForMember(dest => dest.store, opt => opt.MapFrom(src => Mapper.Map<Store, CSVStore>(src)));
- Le magasin est tout simplement un autre objet. Il a un numéro, un nom et une collection de StoreTransportWindow. Je pense que les objets réels sont un peu hors de propos. Je suis de plus en plus après une idée de comment je peux utiliser une carte à l'intérieur d'une autre carte
- Vous pouvez également trouver cela intéressant: stackoverflow.com/questions/14875075/...
Vous devez vous connecter pour publier un commentaire.
Comme mentionné dans le commentaire, la première mappages devrait probablement être plus comme:
Disent maintenant que vous avez les éléments suivants:
Puis le mappage suivant suffira (comme vous l'avez déjà défini les imbriquée cartographie
Store
àCSVStore
):Toutefois, si
Destination
était plus comme ça:Ensuite, vous aurez besoin de définir de manière explicite les propriétés d'être mappés:
(À noter que la cartographie de l'
Store
àCVStore
est appliquée automatiquement.)Si pour une raison quelconque vous avez besoin de définir explicitement un imbriquée mapping, vous pouvez faire quelque chose comme ceci:
J'ai eu besoin de l'utiliser à la fois, mais pas très souvent que la fonctionnalité par défaut prend en charge pour vous automatiquement.
Je peux fournir plus de détails si nécessaire si vous pouvez développer vos exigences.