2012-06-19 45 views
0

舉個例子,如果我有一個論壇POCO和一個ForumPost,我該如何優雅地返回一個ForumPosts列表並在模型中指定這個權限。我現在通過直接在List屬性中添加我的db.Query調用來手動執行它,但有沒有更好的方法?你如何處理與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

我看到兩個問題與此,一個是數據是延遲加載,另一種是,取決於你有多少嵌套表中有你可以用單獨的查詢正在運行的極少數可能已經結束只滿足一個查詢。 –

相關問題