PetaPOCO 和超过 4 个加入

2024-05-12

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

我查看了 PetaPOCO,它似乎无法执行超过 4 个连接,最长的签名如下所示: db.Query

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

我正在测试一些微型 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 中,有一个关系器回调的概念,您可以在其中编写一个小类来处理单个结果行中的不同 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 调用,而不是最初获取所有数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PetaPOCO 和超过 4 个加入 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在Intershop7中注册ORMObjectListener

    我们在网上商店实现中实现了几个自定义 ORM 对象 这些对象引用 依赖 Intershop Product 系统对象 当用户尝试删除后台中的某个产品时 会导致问题 因为对该产品的引用可能仍然存在于我们的自定义对象中 当然 删除从我们的自定义
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐