例如,如果我有一个POCO for Forum和一个ForumPost,我怎样才能优雅地返回一个ForumPost列表并在模型中指定这个权利。我现在通过直接在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列表 - 处理这个问题的好方法是什么? } } }
答案 0 :(得分: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);
}
}
}