gpt4 book ai didi

c# - PetaPOCO 和超过 4 个连接

转载 作者:行者123 更新时间:2023-11-30 21:06:19 25 4
gpt4 key购买 nike

petapoco 是否能够实现以下目标:1.一次查询无限制加入2.一次查询中无限的一对多关系

我看过 PetaPOCO,它似乎不能进行超过 4 个连接,最长的签名如下所示:db.Query

它似乎也支持一对多关系,但仅适用于一个复合对象,如下所示:db.FetchOneToMany 其中 T2 是 T1 的外键

我正在测试一些微型 ORM,以坚持使用最好的 ORM。你知道他们中的任何一个可以处理这些情况吗?如果没有微型 ORM 支持这个功能,你如何处理如下所示的对象:

class A
{
List<B> member1;
List<C> member2;
Z member3; //Composit object
Z1 member4; //Composit object
Z2 member5; //Composit object
Z3 member6; //Composit object
Z4 member7; //Composit object
}

然后更复杂的是,如果成员一(类型 B)本身有一些复合对象怎么办?如果我们有:

class B
{
G member0;
}

请不要提出多次访问数据库的解决方案,因为当对象变得有点复杂时,调用次数会太多。

哦,我还知道另一种解决无限连接情况的方法是创建一个非常扁平的对象,将所有字段组合起来。这根本不是一个优雅的解决方案。

最佳答案

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 中有一个 relator 回调的概念,您可以在其中编写一个小类来处理单个结果行中的不同 poco,并将每个 poco 添加到父 poco 的列表属性中。

http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationships

我从来不需要用多个一对多的方式来做这个,但是从上面引用了

"If you're joining more than two tables you'll need something more complex but it's really just extensions of the above."

另一种选择是使用一个存储过程来完成单个数据库请求中的所有工作,并让它返回多个结果集,我相信 Schotime 在他的 petapoco 分支中已经实现了这一点,但我自己还没有使用过它,所以我不能真正评论它是否会在这里有所帮助:

http://schotime.net/blog/index.php/2011/11/20/petapoco-multiple-result-sets/

如果我绝对必须像您建议的那样为复杂和嵌套的对象一次性连接所有数据,那么我会使用存储过程(单个数据库调用)并将其全部拼接连同代码。只有这样我才能弄清楚如何在 Petapoco 中执行此操作。但是,如果在用户单击扩展按钮(或类似按钮)之前您的 UI 不显示所有嵌套数据,我会在此时使用 AJAX 调用,而不是一开始就获取所有数据。

关于c# - PetaPOCO 和超过 4 个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com