2010-04-20 4 views
0

Est-il possible d'ignorer en fonction de la valeur de destination?Automapper - ignorer lors du mappage

Regardez ce que je veux faire:

object c; 
var key = ce.CreateEntityKey<CustomerDataContract, Customer>("FullCustomerSet", item, o => o.ID); 

if (ce.TryGetObjectByKey(key, out c)) 
{ 
    Mapper.Map(item, (Customer)c); 
} 
else 
{ 
    c = Mapper.Map<CustomerDataContract, Customer>(item); 
    ce.AddObject("FullCustomerSet", c); 
} 

Ignorer la partie CreateEntityKey - il est juste de créer un EntityKey aller obtenir un élément de EDM. ce est de type ObjectContext. Ce que je veux faire est d'essayer d'obtenir une entité à partir d'EDM, de la mettre à jour avec AutoMapper ou, si ce n'est pas le cas, de la créer avec AutoMapper.

Le problème est que AutoMapper mappe toutes les propriétés - même les clés primaires qui ne sont pas autorisées à être modifiées par edm et je reçois une mauvaise exception. Je peux ignorer PK dans CreateMap, mais alors je ne serai pas en mesure de faire une 2ème partie avec la création. Je reçois des PK d'ailleurs ...

Une chose que je peux considérer est quelque chose dans CreateMap - un certain ignorant conditionnel sur l'objet de destination ou la méthode réellement utilisée. Une autre est d'appliquer certaines propriétés dans Mapper.Map méthode ignorant, ou de cartographie manuellement comme ceci:

var map = Mapper.FindTypeMapFor<TSource, TDestination>(); 
foreach (var item in map.GetPropertyMaps().OrderBy(o=>o.GetMappingOrder())) 
{ 
    if (ignore.Contains(item.DestinationProperty.Name)) 
    { 
     continue; 
    } 
    //and now I should do some mapping, but don't know how... 
} 

La question est simple: Comment puis-je le faire? :)

Répondre

1

Qu'en est-il de l'ignorance de PK, puis simplement de c.YourPK = une certaine valeur dans la seconde partie?

+0

yeap ... idée similaire. Je viens de créer ou de l'obtenir à partir du magasin et que d'appliquer la cartographie sur elle en ignorant PK. Thanx – WooBoo

Questions connexes