创建多对多关系
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 个属性:
- 属性名称:
Title,属性类型:string - 属性名称:
PageCount,属性类型:int
点击 导航 标签页。然后点击 添加导航集合 按钮。在弹出的窗口中,点击 选择依赖实体 文本框。会出现一个文件浏览器。找到我们在步骤 1 中创建的 Category.cs 文件。Category.cs 位于 src\Acme.BookStore.Domain\Categories 目录中。选择该文件后,除了 显示属性 外,几乎所有字段都将自动填充。从 属性 下拉菜单中选择 Name。它会将其写入 显示属性 文本框。最后检查其他字段,然后点击 确定 按钮。会添加一个新的导航。点击 保存并生成 按钮,等待 ABP Suite 创建带有导航集合的 Books 页面。
请注意,即使您不重命名
DTO名称、DbContext中的DbSet名称、导航属性名称或命名空间,几乎所有字段都会按照约定自动填充。此工具将自动设置所有必需的字段。另一方面,这些文本框并非只读,因此您可以根据需要更改它们。
导航集合的数据库结构
会创建 AppBooks 和 AppCategories 表。同时会创建第三个表 (AppBookCategory) 来保存这些表之间的关系。
最终效果
下图是 ABP Suite 创建的最终页面。New book 对话框中有一个 Categories 标签页,其中列出了书籍的所有类别,并允许添加/移除类别。
抠丁客







