1

例如,如果我有一个用于 Forum 的 POCO 和一个用于 ForumPost 的 POCO,我如何优雅地返回一个 ForumPosts 列表并在模型中指定此权限。我现在通过直接在 List 属性中添加我的 db.Query 调用来手动执行此操作,但有更好的方法吗?

[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 列表 - 有什么好的方法来处理这个?} } }

4

1 回答 1

0

我为此编写了一个静态扩展,因此我可以像这样在我的属性中设置它(使用我的一些类)。此属性将在您的 POCO 模型中:

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

这是我为此编写的 ServiveExtension,但不确定我是否喜欢这个。它有效,但是嗯。有人有更好的想法吗?

 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);
        }
    }
}
于 2012-06-20T18:48:43.207 回答