0

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。

4

1 回答 1

1

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

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

官方方法(目前)是创建一个包含一些状态(关于当前记录)的关系类和一个 PetaPoco 将为结果集中的每一行调用的方法。relator 告诉 PetaPoco 何时停止将 SubColors 添加到 ColorCategory 并移动到下一个父 poco。

但是,Schotime添加了一些出色的功能来自动执行此操作

这在我在 GitHub 的测试应用程序中得到了演示。编程非常简单,但请注意 SELECT 列的顺序至关重要,因为 PetaPoco 依赖的流程与 Fetch<T1, T2...> poco 列表中的流程相同。

另一种方法是 N+1 方法,您可以按需加载 SubColors。

于 2011-10-05T21:58:48.813 回答