PetaPoco水合POCO属性的正确方法是什么?我想做这样的事情,但不确定如何。
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。
答案 0 :(得分:1)
您可以在sql查询中加入SubColors,因此您可以为每个SubColor返回一个重复的ColorCategory记录,如下所述:
官方方法(目前)是创建一个包含某种状态(关于当前记录)的关系类,以及PetaPoco将为结果集中的每一行调用的方法。关联人告诉PetaPoco何时停止向ColorCategory添加SubColors并转移到下一个父poco。
但是,Schotime添加了一些brilliant functions that automate this。
我的test app at GitHub证明了这一点。编程非常简单,但要注意SELECT列的顺序是至关重要的,因为PetaPoco依赖于流程与Fetch&lt; T1,T2 ...&gt;中的相同。 poco list。
替代方案是N + 1方法,您可以根据需要加载SubColors。