Show / Hide Table of Contents

    复合查询设计器

    本文将介绍复合查询设计器中的可用选项。

    复合查询设计器:在 添加新项 中选择 复合查询设计,然后选择实体数据源,点击 创建,复合查询设计器 将打开。 它允许您对实体进行连接、分组、排序、报表的展示等。 复合查询模型常用于多表或者复杂查询的场景。

    字段设计

    基本设置

    您可以在 字段设计 选项卡中指定以下基本设置:

    显示名称:复合查询模型的显示名称。将在 C# 代码中生成 [DisplayName] 属性。

    描述:复合查询模型的描述。 该描述将在 C# 代码中显示为注释。

    关系设计面板

    点击 关系 设计面板右上角的 添加数据源,可以选择或修改所需要的实体数据源。实体数据源将会显示在 关系 设计面板中。

    不同的数据源之间以字段来连接。因此我们需要手动连接实体字段。有两种方式:

    • 在 关系 设计面板中,点击数据源标题栏的向下图标展示数据源中的所有字段,然后通过长按并拖动鼠标把不同数据源的字段连接起来。默认为内连接(Inner Join)。可以在右侧的 关系设置 标签页中修改。关系 设计面板和 关系设置 标签页将同步更新。
    • 在右侧的 关系设置 标签页中,添加和指定数据源字段以及连接方式(Inner Join、Left Join、Right Join)。

    关系设置

    在 关系设置 标签页中,点击 添加关系 ,然后选择数据源以及连接方式。支持以下三种方式:

    • Inner Join(内连接)根据两个表之间的共同列值连接在一起,并返回满足连接条件的行。Inner Join 仅返回符合条件的行,即两个表中共有的行。
    • Left Join(左连接)会返回左表中的所有行,以及与右表匹配的行(如果有的话)。如果右表中没有与左表匹配的行,则会返回 NULL 值。
    • Right Join(右连接)会返回右表中的所有行,以及与左表匹配的行(如果有的话)。如果左表中没有与右表匹配的行,则会返回 NULL 值。

    然后点击添加图标,选择数据源字段或者输入表达式进行连接。

    可以对数据源的字段进行表达式的运算以后再进行关联。

    image-20240607111422239

    分组设置

    在 分组设置 标签页中可以对数据源的字段进行分组。将具有相同值的行组合在一起,然后可以对这些组执行聚合函数(如sum,count,avg,max,min等)。

    在 分组设置 标签页中,点击 添加分组 ,然后选择分组字段或者输入表达式进行分组。

    选择分组字段后,对应的字段也会自动添加为结果集字段,可以在 结果集字段 中查看或修改。

    还可以通过表达式实现动态分组。

    image-20240607111651426

    结果集字段

    每个分组字段将自动添加为结果集字段,以便同步输出分组字段。你可以修改、添加、或删除字段。

    在 结果集字段 标签页中,点击 添加字段。您可以修改名称和显示名称,配置值(映射)等。您还可以指定结果集字段为一个集合。在右侧设置中,还可以添加自定义特性代码。

    值(映射) 可以为数据源已有字段或表达式。表达式可以对输出的结果集字段进行二次处理。

    image-20240607130558129

    Group.Key下表示分组的字段。其他的实体表示的是分组以后的数据源。具有相同值的行将组合在一起。

    QueryItems下面的实体是做了连接但未分组的数据源。

    注:这些实体和数据源都表示集合,可以对其进行聚合函数和集合操作。具体使用方式,请参考:输出结果集映射。

    自定义代码

    您可以对结果集添加自定义代码,包括:命名空间、继承、类特性、及代码片段。

    image-20240618112641756

    您还可以对当前结果集字段添加自定义代码,目前包括:属性特性。

    image-20240618112709074

    具体添加方式,请参考 这个小节。

    过滤器设计

    您可以通过 过滤器设计 选项卡对数据进行过滤。过滤器是指根据一组逻辑(过滤条件)和用户输入(参数)对来自数据源(过滤源)的数据进行过滤。

    在 过滤器设计 选项卡中创建过滤器后,如果在 服务与API设计 选项卡中选择生成带有过滤器的API,则对应的过滤器(数据)、服务(接口和业务逻辑) )、控制器(调用方法)将被生成。

    您可以在 过滤器设计 选项卡进行以下设置:

    • 添加过滤器参数或使用参数集合。
    • 定义过滤器的逻辑条件。共有三种形式:字段、表达式 和 范围。 多个条件可以用 “且” 或 “或” 连接。

    具体配置方法同“实体设计器”。请参考 实体设计器 > 过滤器设计 小节了解如何设置。

    image-20240626172435993

    自定义代码

    您可以对当前过滤器添加自定义代码,包括:命名空间、继承、类特性、及代码片段。

    具体添加方式,请参考 这个小节。

    image-20240618113413802

    服务与API设计

    您可以在 服务与 API 设计 选项卡中决定是否生成控制器和服务,包括:Get、GetList、GetPage。 您可以点击 添加服务 按钮添加 API 和过滤 API。

    然后,您可以选择 API 后面的 生成 API 选项来为 API 生成控制器。

    image-20240626162325820

    服务

    服务与 API 设计 选项卡提供以下三种类型的服务:

    • 获取单条数据 表示 Get 服务。
    • 获取列表数据 表示 GetList 服务。
    • 获取分页数据 表示 GetPage 服务。

    您可以配置服务的以下设置:

    • 参数设置:列出服务的请求参数。

    • 返回设置:指定服务的每个响应字段的返回值。 您可以选择一个字段或输入一个值或表达式。

    • 排序设置(对返回数据进行排序):(对于 GetList 和 GetPage)点击选择要排序的返回数据,然后点击 添加排序选项 选择字段或输入表达式对数据进行排序。

      返回值排序设置不会影响数据库查询返回的数据源的排序,只会改变最终返回结果集的排序。

      返回值排序中的数据源表示实体本身以及实体中关联的实体字段。 每个排序源可以设置多种排序规则。

    • 描述:服务的描述。

    具体配置方法同“实体设计器”。请参考 实体设计器 > 服务 小节了解如何设置。

    image-20240626164510826

    API

    服务与 API 设计 选项卡最终将影响控制器层的代码生成。 通过 API 设计器,可以轻松配置 API 请求方式、参数来源、授权等。

    只需选择 生成 API 选项。 API 将自动生成。 当然,您还可以进一步配置 API。

    image-20240626163547699

    您可以配置 API 的以下设置:

    • 名称:API 的名称。每个 API 都有一个名称。 但需要注意的是,更改 API 的名称会影响 API 的请求路由。

    • 方法类型:API 的默认方法类型。每个 API 都有一个请求方法。 您可以根据需要更改请求方法,也可以使用默认值。

    • 路由模板: API 的路由格式。您可以为所有的 API 设置统一的路由格式。也可以为某个 API 单独设置路由格式。

    • 参数设置:参数可以与不同的来源绑定; 这决定了 ASP.NET Core 如何绑定请求参数。您可以选择从以下方式获取参数:

      • FromQuery:从请求查询字符串参数推断
      • FromRoute:从任何与路由模板中的参数匹配的参数名称推断
      • FromHeader:从请求头推断
    • 授权设置:在项目属性页中启用授权后,API 将使用此处指定的默认策略(默认为 ASP.NET Core 默认策略)。 您还可以选择以下基本授权策略之一:使用上层策略、使用应用程序默认策略、使用匿名策略 或使用其他自定义策略。

      • 使用上层策略:使用上层策略。 默认情况下不进行授权验证。 如果有引用的类库,则使用父类的默认策略。

      • 使用应用程序默认策略:使用应用程序配置的默认策略。

      • 使用匿名策略:使用匿名访问策略。 匿名访问允许请求无需身份验证即可通过。

        在授权过程中,将验证指定策略下的权限设置(用户可能需要单独编码和实现策略)。

    • 描述:API 的描述。

    具体配置方法同“实体设计器”。请参考 实体设计器 > API 小节了解如何设置。

    image-20240626170407227

    自定义代码

    您可以对服务(接口)、服务(实现)、和控制器添加自定义代码,包括:命名空间、继承、类特性、及代码片段。

    image-20240618111210093

    您还可以对当前服务与API添加自定义代码,包括:方法特性及代码片段。

    image-20240618114353867

    具体添加方式,请参考 这个小节。

    返回顶部