从关系数据库映射

本文关键字:映射 关系数据库 | 更新日期: 2023-09-27 18:06:48

一对一的关系很简单。
当涉及到一对多或多对多的问题出现时……
由于许多原因,我现在没有使用ORM工具,我想知道当我想获得数据时,使用多个查询或代码重新组装一对多关系是否更好。

例如

. .拥有一类类别和一类产品……

一个产品表有一个列用于类别id(一个类别多个产品)。

因此,对于我的完整目录,执行2个查询以获得我想要的类别和产品,然后为每个类别填充其产品列表是否更好?(用LINQ很容易)…

或者我应该为每个类别调用查询?如select id from products where category_id=5;

我也不知道如何命名函数喜欢设置是否我想获取的关系的另一边或不..

从关系数据库映射

您应该始终使用尽可能少的查询来检索数据。为每个类别执行一个查询来加载产品被称为N+1问题,并且可能很快导致代码中的瓶颈。

至于如何命名指定获取计划的方法,请按照方法实际执行的操作来命名,例如IncludeProducts或WithProducts。

如果要检索所有类别及其所有产品,可以选择所有类别,然后在两个查询中选择所有产品,也可以在一个查询和组中进行选择。

如果只使用一个查询,请为两个表选择一个内部连接

SELECT c.*, p.* 
FROM Category c INNER JOIN Product p ON c.CategoryId = p.CategoryId

,然后从结果数据集

构造业务对象。
result.GroupBy(r => r.CategoryId).Select(group =>
    new Category(/* new Category using c.* columns */)
    { 
        Products = /* new list of Products from p.* values */
    });

但是我不得不问——你为什么不使用ORM?