PetaPoco连接属性

时间:2011-10-04 17:05:20

标签: petapoco

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。

1 个答案:

答案 0 :(得分:1)

您可以在sql查询中加入SubColors,因此您可以为每个SubColor返回一个重复的ColorCategory记录,如下所述:

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

官方方法(目前)是创建一个包含某种状态(关于当前记录)的关系类,以及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。