0

コレクションである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がある場合。

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 は、いつ SubColors を ColorCategory に追加するのをやめ、次の親 poco に移動するかを PetaPoco に伝えます。

ただし、Schotimeは、これを自動化するいくつかの優れた機能を追加しました。

これは、GitHub のテスト アプリで実証されています。プログラミングは非常に簡単ですが、PetaPoco は Fetch<T1, T2...> poco リストと同じフローに依存しているため、SELECT 列の順序が重要であることに注意してください。

別の方法は、必要に応じてサブカラーをロードする N+1 アプローチです。

于 2011-10-05T21:58:48.813 に答える