项目

创建多对多关系

ABP Suite 允许您创建多对多关系。您可以在 CRUD 页面生成界面中选择一个外键实体来定义 导航集合

导航集合

导航集合 是实体上的一种属性类型,它链接到外键实体的多个实例。与普通属性不同,这些属性不携带任何数据,而是链接到其他实体。

当您使用 ABP Suite 创建导航集合时,会得到一个可输入提示的下拉菜单,用于从依赖记录列表中添加记录。然后,您可以添加或移除集合中的记录。

在这种场景中,一个实体的多条记录会与另一个实体的多条记录相关联。这意味着您需要另一个数据库表来保存实体之间的这些连接。

让我们通过一个例子来更深入地理解它...

逐步创建多对多关系

我们将创建一个 Book 实体和一个 Category 实体。每本书可能属于一个或多个类别。

1- 创建 "Category" 实体

首先,我们创建 Category 实体。Book 实体将依赖于它。在 实体信息 标签页中,在 名称 字段中输入 "Category"。其余部分将自动填充。然后点击 属性 标签页并添加以下属性:

  • 属性名称: Name属性类型: string

点击 保存并生成 按钮,等待 ABP Suite 创建页面。

导航集合-类别实体

完成后,运行 Web 项目并转到 Categories 页面。点击 New Category 按钮并添加一些记录:

导航集合-类别页面

2- 创建 "Book" 实体

让我们在 ABP Suite 中创建 Book 实体。点击页面顶部 实体 下拉菜单中的 -新建实体-,然后在 名称 字段中输入 "Book"。其余部分将自动填充。然后点击 属性 标签页并添加 2 个属性:

  1. 属性名称: Title属性类型: string
  2. 属性名称: PageCount属性类型: int

点击 导航 标签页。然后点击 添加导航集合 按钮。在弹出的窗口中,点击 选择依赖实体 文本框。会出现一个文件浏览器。找到我们在步骤 1 中创建的 Category.cs 文件。Category.cs 位于 src\Acme.BookStore.Domain\Categories 目录中。选择该文件后,除了 显示属性 外,几乎所有字段都将自动填充。从 属性 下拉菜单中选择 Name。它会将其写入 显示属性 文本框。最后检查其他字段,然后点击 确定 按钮。会添加一个新的导航。点击 保存并生成 按钮,等待 ABP Suite 创建带有导航集合的 Books 页面。

请注意,即使您不重命名 DTO 名称、DbContext 中的 DbSet 名称、导航属性名称或命名空间,几乎所有字段都会按照约定自动填充。此工具将自动设置所有必需的字段。另一方面,这些文本框并非只读,因此您可以根据需要更改它们。

导航集合-书籍实体

导航集合的数据库结构

会创建 AppBooksAppCategories 表。同时会创建第三个表 (AppBookCategory) 来保存这些表之间的关系。

导航集合-数据库

最终效果

下图是 ABP Suite 创建的最终页面。New book 对话框中有一个 Categories 标签页,其中列出了书籍的所有类别,并允许添加/移除类别。

导航集合-书籍页面


在本文档中