2011-10-04 61 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