2014-10-01 12 views
1

如果我有:如何合併兩個表達式樹體?

m => m.OwnedCollection(p => p.Addresses) 

m => m.OwnedCollection(p => p.Contacts) 

我想將它們組合爲:

m => m.OwnedCollection(p => p.Addresses).OwnedCollection(p => p.Contacts) 

是否有這樣做的一種方式?

我也希望能夠結合:

m => m.OwnedCollection(p => p.Contacts) 

和:

with => with.AssociatedCollection(p => p.AdvertisementOptions) 

是:

m => m.OwnedCollection(p => p.Contacts, with => with.AssociatedCollection(p => p.AdvertisementOptions)) 

是否有這樣做一個作爲的方式好?

我希望這些都是相當簡單的要求,但我發現很難掌握術語。

一些背景資料:

我使用https://github.com/refactorthis/GraphDiff支持實體合併更新。問題在於它期望一個表達樹來描述要更新的實體的關係,例如。

context.UpdateGraph(company, map => map 
    .OwnedCollection(p => p.Contacts, with => with 
     .AssociatedCollection(p => p.AdvertisementOptions)) 
    .OwnedCollection(p => p.Addresses) 
); 

礦需要一個通用的解決方案,所以我需要檢查各種一到一對一,一對多和多對多我的許多實體的關係型;在使用反射,將其換算成表達式樹。

任何幫助我的具體問題或一般的幫助,將不勝感激。

回答

2

GraphDiff的develop分支支持基於屬性的映射。您可以將自定義屬性(OwnedAssociated)添加到模型類的導航屬性中,而GraphDiff將爲您創建映射,而不是提供映射圖形的表達式樹。有關這方面的一些示例,請參閱GraphDiffs test models

+0

Thanks @andyp。我確實發現了這一點,並將儘快採取行動。與此同時,我使用Mapping的方法創建了一個IMergeable接口,並在該方法中返回該類的表達式。在我的倉庫中,我檢查對象是否是IMergeable,並調用映射方法將其傳遞給graphdiff。 – user2363071 2014-10-27 12:44:58