T1..T$ Query() 重载所有传递到主 Query(..Type[]..) 方法的内容。您可以自己添加更多 Query() 重载来处理更多 T 参数,或者在 Type 数组中传入您需要的所有类型(这就是 T1-T4 函数的作用):
Query<TRet>( new Type[]{typeof(Poco1), typeof(Poco2), typeof(Poco3), typeof(Poco4), typeof(Poco5)}, null, sql, args);
您可以拥有多个一对多关系,但 Schotime 是对的,您需要非常小心结果集中返回的大量重复数据。编写sql查询并查看结果集,重复量是否可以接受?如果是这样,那么在 Petapoco 中,有一个关系器回调的概念,您可以在其中编写一个小类来处理单个结果行中的不同 poco,并将每个 poco 添加到父 poco 上的列表属性中。
http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-一对多和多对一关系 http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationships
我从来没有必要用多个一对多来做到这一点,但引用了上面的内容
“如果您要加入两个以上的桌子,您将需要更多的东西
很复杂,但它实际上只是上述内容的延伸。”
另一种选择是使用一个存储过程,在单个数据库请求中完成所有工作,并返回多个结果集,我相信 Schotime 已经在他的 petapoco 分支中实现了这一点,但我自己还没有使用过它,所以我不能真正评论一下它是否有帮助:
http://schotime.net/blog/index.php/2011/11/20/petapoco-multiple-result-sets/ http://schotime.net/blog/index.php/2011/11/20/petapoco-multiple-result-sets/
If I 绝对有对于像您建议的那样复杂和嵌套的对象,一次性连接所有数据,然后我将使用存储过程(单个数据库调用)并将其全部与代码缝合在一起。只有这样我才能弄清楚如何在佩塔波科做到这一点。但是,如果您的 UI 在用户单击扩展按钮(或类似按钮)之前不显示所有嵌套数据,那么我会在此时使用 AJAX 调用,而不是最初获取所有数据。