2011-10-04 62 views
0

PetaPoco的合適方式是如何合成一個集合的POCO屬性?我想要做這樣的事情,但不知道如何。PetaPoco收集合適的物品

return db.Fetch<ColorCategory, List<SubColor>, ColorCategory>((c, s) => { c.SubColors = *?*; return c; }, "SELECT [ColorCategory].[ColorCategoryID] " + 
      ",[ColorCategory].[DisplayOrder] " + 
      ",[ColorCategory].[Name] " + 
      ",[ColorCategory].[ModifiedDate] " + 
      ",[ColorCategory].[ModifiedUser] " + 
      ",[SubColor].[SubColorID] " + 
      ",[SubColor].[Name] " + 
      "FROM [ColorCategory] " + 
      "INNER JOIN [ColorCategorySubColor] ON [ColorCategory].[ColorCategoryID] = [ColorCategorySubColor].[ColorCategoryID] " + 
      "INNER JOIN [SubColor] ON [ColorCategorySubColor].[SubColorID] = [SubColor].[SubColorID]"); 

其中ColorCategory類具有List屬性SubColors。

回答

1

你可以加入SubColors在SQL查詢,讓你回來重複ColorCategory記錄每SubColor爲解釋在這裏:

http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationships

的offcial方法(目前)是創建一個包含某些狀態(關於當前記錄)的relator類以及PetaPoco將針對結果集中的每一行調用的方法。該關聯器告訴PetaPoco何時停止將SubColors添加到ColorCategory並轉到下一個父poco上。

但是,Schotime增加了一些brilliant functions that automate this

這在我的test app at GitHub中有說明。編程非常簡單,但請注意,SELECT列的順序非常重要,因爲PetaPoco依靠的流程與獲取< T1,T2 ... > poco列表中的流程相同。

另一種方法是按需加載SubColors的N + 1方法。

+0

我確實必須創建relator類,一旦我明白了它的工作原理,它就非常簡單。謝謝! – RobertMGlynn