Обычно я сам сопоставляю эти запросы «один ко многим», как в следующем примере.
[TableName("Blogs"), PrimaryKey("BlogId")]
public class Blog {
public int BlogId {get;set;}
public string Title {get;set;}
[Ignore]
public IList<Post> Posts {get;set;}
}
[TableName("Posts"), PrimaryKey("PostId")]
public class Post {
public int PostId {get;set;}
public int BlogId {get;set;}
public string Subject {get;set;}
public string Content {get;set;}
}
public class FlatBlogPost {
public int BlogId {get;set;}
public string Title {get;set;}
public int PostId {get;set;}
public string Subject {get;set;}
public string Content {get;set;}
}
Существует два способа отображения списка постов для одного блога или без лишней работы для всех блогов.
1.Два запроса -
var Blog = Db.Query<Blog>(1);
var Posts = Db.Query<Post>("where BlogId = @0", 1);
2. Один запрос =
var flat = Db.Query<FlatBlogPost>("select b.blogid, b.title, p.postid, p.subject,
p.content from blogs b inner join posts p on b.blogid = p.blogid where
b.blogid = @0", 1);
var blog = flat
.GroupBy(x=> new { x.BlogId, x.Title })
.Select(x=> new Blog {
BlogId = x.Key.BlogId,
Title = x.Key.Title,
Posts = x.Select(y=> new Post{
PostId = y.PostId,
BlogId = x.Key.BlogId,
Subject = y.Subject,
Content = y.Content
}).ToList()
});
Однако, как правило, в номере 2 я непосредственно сопоставляю объект FlatBlogPost с моей моделью представления, для которой мне нужно отобразить данные.
Обновление
Ознакомьтесь с этими помощниками, которые расширяют PetaPoco для поддержки базовых запросов «один ко многим» и «многие к одному». schotime.net / blog / index.php / 2011/08/21 / petapoco «один ко многим и много ко одному» / https://schotime.wordpress.com/2011/08/21/petapoco-one-to-many-and-many-to-one/