在(迷你)ORM中建模聚合结果集

本文关键字:结果 建模 迷你 ORM | 更新日期: 2023-09-27 18:00:51

我使用的是PetaPoco mini ORM,它在我的实现中运行存储过程并将它们映射到我定义的对象模型。这对于提取奇异表的查询(即SELECT*FROM Orders(非常直观,但当我开始编写提取聚合结果的查询时,情况就不那么好了。例如,假设我有一个Customers表和Orders表,其中Orders表包含对CustomerID的外键引用。我想检索所有订单的列表,但在我的应用程序视图中,显示客户名称以及所有其他订单字段,即

SELECT
    Customers.Name,
    Orders.*
FROM
    Orders
    INNER JOIN Customers
        ON Orders.CustomerID = Customers.ID

由于以前没有使用过任何类型的ORM,我不确定处理这类数据的正确方法。我现在看到两个选项:

  1. 为特定操作创建新的聚合模型。我觉得这样做会在任何大型应用程序中产生大量的模型,但它会让我将查询结果直接映射到对象
  2. 有两个单独的查询,一个检索Orders,另一个检索Customers,然后通过LINQ加入它们。这似乎是一个比#1更好的选择,但同样显得迟钝,因为当我想要30列时,我会抽出30列(尽管我的特定迷你ORM允许我只抽出一行并将其绑定到模型上(

有没有我提到的两种更喜欢的方法,或者我没有想到的更好的方法?

在(迷你)ORM中建模聚合结果集

选项#1在基于CQRS的体系结构中很常见。当你仔细考虑它时,它是有意义的:尽管它需要一些努力,但它直观地映射到你正在做的事情,并且不会影响解决方案的其他部分。因此,如果你必须改变它,你可以在不破坏其他任何东西的情况下这样做。