2011-10-04 4 views
0

수집 물인 POCO 속성을 수화시키는 PetaPoco의 적절한 방법은 무엇입니까? 이런 식으로하고 싶지만 어떻게해야할지 모르겠다.PetaPoco collection properites

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

당신이 모든 SubColor 다시 중복 ColorCategory 기록을 얻을 수 있도록 여기에 설명 된대로 SQL 쿼리에 SubColors에 가입 할 수는 :

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

(순간)을 offcial 방법 A를 만드는 것입니다 relator 클래스는 (현재 레코드에 대한) 몇 가지 상태와 PetaPoco가 결과 집합의 모든 행에 대해 호출 할 메소드를 포함합니다. relator는 PetaPoco에게 ColorCategory에 SubColor를 추가하는 것을 멈추고 다음 부모 poco로 이동할시기를 알려줍니다.

그러나 Schotime에는 일부 brilliant functions that automate this이 추가되었습니다.

test app at GitHub에 나와 있습니다. 프로그램을 작성하는 것은 매우 간단하지만 PetaPoco가 가져 오기 < T1, T2 ... > poco 목록에서와 동일한 흐름에 의존하기 때문에 SELECT 열의 순서가 중요하다는 점에 유의하십시오.

N-1 접근 방식은 필요에 따라 SubColor를로드하는 방식입니다.

+0

일단 내가 어떻게 작동하는지 이해하면, relator 클래스를 만들어야 만했다. 꽤 간단했다. 감사! – RobertMGlynn