2012-06-19 7 views
0

예를 들어 Forum에 POCO가 있고 ForumPost에 POCO가 있으면 어떻게 ForumPosts 목록을 우아하게 반환하고 모델에서이 권한을 지정할 수 있습니까? 지금 db.Query를 List 속성에 직접 추가하여 수동으로 처리하고 있지만 더 좋은 방법이 있습니까?PetaPoco로 다른 테이블과의 관계를 어떻게 처리합니까?

[TableName("Forum")] 
[PrimaryKey("ForumID")] 
[ExplicitColumns] 
public class Forum : BaseModel 
{ 
    [Column] 
    public int ForumID { get; set; } 
    [Column] 
    public string ForumName { get; set; } 
    [Column] 
    public string ForumDescription { get; set; } 
    [ResultColumn] 
    public List<ForumPost> { 
     get 

ForumPost의 { // 반환 목록 -이 문제를 해결할 수있는 좋은 방법은 무엇입니까? } } }

답변

0

이렇게 정적 속성을 작성 했으므로 (내 클래스 중 일부를 사용하여)이 속성에서 이와 같이 설정할 수 있습니다. 이 속성은 POCO 모델에있을 것입니다 : 여기

private List<AssessmentAssignment> _AssessmentAssignments; 
    [ResultColumn] 
    public List<AssessmentAssignment> AssessmentAssignments 
    { 
     get 
     { 
      return ServiceExtensions<AssessmentAssignment>.GetRelatedList(this.GetType()); 
     } 
     set 
     { 
      _AssessmentAssignments = value; 
     } 
    } 

나는 그것을 위해 쓴 ServiveExtension,하지만 확실하지 난 아직이를 좋아한다. 그것은 작동하지만, meh. 누구든지 더 좋은 아이디어가 있습니까?

public static class ServiceExtensions<T> where T : class, new() 
{ 
    /// <summary> 
    /// Experimental way to retrieve a foreign key related list with PetaPoco 
    /// </summary> 
    /// <param name="PrimaryTableType"></param> 
    /// <returns></returns> 
    public static List<T> GetRelatedList(Type PrimaryTableType) 
    { 
     var primaryTableData = PocoData.ForType(PrimaryTableType); 
     var relationshipTableData = PocoData.ForType(typeof(T)); 

     using (PetaPoco.Database db = new PetaPoco.Database("ConnStringName")) 
     { 
      PetaPoco.Sql sql = new PetaPoco.Sql("SELECT A.* FROM " + relationshipTableData.TableInfo.TableName + " A") 
      .Append("JOIN " + primaryTableData.TableInfo.TableName + " B ON A." + primaryTableData.TableInfo.PrimaryKey + " = B." + primaryTableData.TableInfo.PrimaryKey); 

      return db.Fetch<T>(sql); 
     } 
    } 
} 
+0

나는 하나의 데이터가 게으른로드 당신이 얼마나 많은 중첩 된 테이블에 따라 당신이 수 있었다 별도의 쿼리 실행되고 소수로 끝날 수있는 다른 것을되고,이 두 가지 문제를 참조 하나의 쿼리만으로 만족했습니다. –

관련 문제