2010-04-20 143 views
0

根據目標值可以忽略嗎?Automapper - 映射時忽略

看看我想做的事:

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); 
} 

忽略CreateEntityKey部分 - 它只是創造一個EntityKey去從EDM獲得的項目。 ce類型爲ObjectContext

我想要做的是嘗試從EDM獲取實體,使用AutoMapper更新它,或者如果它不在那裏,使用AutoMapper創建它。

問題是AutoMapper映射所有屬性 - 即使主鍵不允許被edm改變,我也會得到一個令人討厭的異常。我可以忽略CreateMap中的PK,但是我不能在創建時做第二部分。我得到的PK從別的地方...

有一件事我可能會考慮一些是在CreateMap - 目標對象或實際使用的方法在一些有條件的忽視。 另一個是Mapper.Map方法應用一些忽略的屬性,或手動映射,像這樣:

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... 
} 

的問題很簡單:我該怎麼辦呢? :)

回答

1

如何無視PK,然後就做c.YourPK = someValue中的secong一部分?

+0

yeap ...類似的想法。我只是從商店創建或獲取它,而不是僅應用映射,忽略PK。 Thanx – WooBoo 2010-04-23 11:54:07