C# 在(小型)ORM中建模聚合结果集
我正在使用PetaPoco mini ORM,它在我的实现中运行存储过程,并将它们映射到我定义的对象模型。这非常直观地适用于提取单数表的查询,即从订单中选择*,但当我开始编写提取聚合结果的查询时,情况就不那么糟了。例如,假设我有一个Customers表和Orders表,其中Orders表包含对CustomerID的外键引用。我想检索所有订单的列表,但在我的应用程序视图中,显示客户名称以及所有其他订单字段,即C# 在(小型)ORM中建模聚合结果集,c#,orm,C#,Orm,我正在使用PetaPoco mini ORM,它在我的实现中运行存储过程,并将它们映射到我定义的对象模型。这非常直观地适用于提取单数表的查询,即从订单中选择*,但当我开始编写提取聚合结果的查询时,情况就不那么糟了。例如,假设我有一个Customers表和Orders表,其中Orders表包含对CustomerID的外键引用。我想检索所有订单的列表,但在我的应用程序视图中,显示客户名称以及所有其他订单字段,即 SELECT Customers.Name, Orders.* FROM
SELECT
Customers.Name,
Orders.*
FROM
Orders
INNER JOIN Customers
ON Orders.CustomerID = Customers.ID
由于之前没有使用过任何类型的ORM,我不确定处理此类数据的正确方法。我现在看到两种选择:
为特定操作创建新的聚合模型。我觉得这样做在任何大型应用程序中都会得到大量的模型,但它可以让我将查询结果直接映射到对象。
有两个单独的查询,一个用于检索订单,另一个用于检索客户,然后通过LINQ将其联接。这似乎是一个比1更好的选择,但同样显得迟钝,因为当我想要一个列时,我正在拉出30个列,尽管我的特定迷你ORM允许我只拉出一行并将其绑定到模型。
有没有我提到的两种方法中的一种,或者我没有想到的更好的方法来实现这一点?选项1在基于CQR的体系结构中很常见。当您考虑它时,它是有意义的:尽管它需要一些努力,但它直观地映射到您正在做的事情,并且不会影响解决方案的其他部分。因此,如果您必须更改它,您可以在不破坏其他任何内容的情况下进行更改。选项1在基于CQR的体系结构中很常见。当您考虑它时,它是有意义的:尽管它需要一些努力,但它直观地映射到您正在做的事情,并且不会影响解决方案的其他部分。因此,如果您必须更改它,您可以在不破坏其他任何内容的情况下进行更改。我认为最终我可能会这样做。今天我尝试了选项2,在查询以检索多个对象集之后,我最终还是需要将它们组合成一些聚合…因此我最好使用SQL而不是C来执行逻辑,以节省来回的时间。谢谢我想最终我可能会这样做。今天我尝试了选项2,在查询以检索多个对象集之后,我最终还是需要将它们组合成一些聚合…因此我最好使用SQL而不是C来执行逻辑,以节省来回的时间。谢谢