技术要求

在开始使用 ABP 框架之前,您需要在计算机上安装一些工具。

IDE/编辑器

本书假设您使用的是Visual Studio 2022(支持 .NET 6.0 的 v10.0)或更高版本。如果你还没安装,社区版是在https://visualstudio.microsoft.com上免费提供。当然,你也可以使用你喜欢的集成开发环境IDE)或编辑器,只要它支持使用 C# 进行 .NET 程序开发。

.NET 6 SDK

如果你已经安装Visual Studio,你也会同时安装.NET 软件开发工具包 (SDK)。否则,请从https://dotnet.microsoft.com/download安装 .NET 6.0 或更高版本。

数据库准备

ABP 框架可以与任何数据源对接。目前已预先集成:Entity Framework Core(EF Core) 和MongoDB。对于 EF Core,支持所有数据库管理系统(DBMS ),例如如 SQL ServerMySQLPostgreSQLOracle 等。
在本章中,我将使用SQL Server作为 DBMS。启动解决方案使用LocalDB(一个简单的 SQL Server 实例,适用于安装了 Visual Studio 的开发人员)。但是,您可以想使用完整版的 SQL Server。如果你想使用完整版的SQL Server,您可以从https://www.microsoft.com/sql-server/sql-server-downloads下载SQL Server Developer Edition

安装 ABP CLI

大部分主流的框架都会提供了 CLI,ABP 框架也不例外。ABP CLI是一个命令行工具,它可以为 ABP 应用程序执行一些常见任务。比如,创建以 ABP 框架为基础的新解决方案。
通过终端,输入以下命令安装它:
dotnet tool install -g Volo.Abp.Cli
如果您已经安装了它,您可以使用以下命令将其更新到最新版本:
dotnet tool update -g Volo.Abp.Cli

创建新解决方案

ABP 框架提供一个预构建的应用程序启动模板。有两种方法可以使用此模板创建新解决方案(Solution)。

官网配置和下载

您可以直接从https://abp.io/get-started创建和下载解决方案。在这个页面上,如图,您可以轻松选择用户界面(UI) 框架、数据库提供程序和其他可用选项:

值得一提的是此页面上的选项,不同的配置会影响到不同的架构、结构和工具。
  • Project name是 Visual Studio 解决方案(.sln文件)的名称,也是项目的根命名空间。
  • 对于Project type,有两个选项,如下所示:
    • Module模板用于创建可重用的应用模块。
    • Application模板用于构建 Web 应用程序。
模块模板的详情将在[第 15 章] 使用模块化中介绍。在这里,我选择了应用程序模板,因为我想创建一个新的 Web 应用程序,我们将在下一章中使用它。
截止目前,有四个UI 框架选项可用,如下所示:
  • MVC/Razor Page
  • Angular
  • Blazor WebAssembly
  • Blazor Server
    您可以选择最适合您的应用要求。我们将在本书的第 4 部分,用户界面和 API 开发中介绍MVC/Razor 页面Blazor选项。您可以在 ABP 的官方文档中了解有关 Angular UI 的更多信息。在这里,我选择MVC/Razor Page选项作为示例。
目前,有两个可用的数据库提供程序选项,如下所示:
  • Entity Framework Core
  • MongoDB
如果选择Entity Framework Core选项,则可以使用 EF Core 支持的任何 DBMS。我在这里选择了带有SQLServer选项的 EF Core。
ABP 还提供基于React Native的移动模板,一个由Facebook 提供的流行单页应用程序(SPA) 框架。这本书暂不涉及移动开发,所以我将其保留为None
最后,如果您想将您的 UI 与HTTP API做物理分离,可以选中分层选项。在这种情况下,UI 将没有直接的数据库连接,它通过 HTTP API 执行调用。你可以将 UI 和 HTTP API 分开部署。这里我们使用单体架构而不是分布式系统,虽然ABP 也支持这种分布式场景。
当您选择完这些选项后,ABP 会创建一个完全可用的生产级别的解决方案,您可以在此基础上开始构建您的应用程序。如果您稍后想要更改选项(例如,如果您想要使用 MongoDB 而不是 EF Core),您应该重新创建您的解决方案或手动配置相关 NuGet 包,目前没有自动更改这些选项的方法。
除了从网站下载您的解决方案,对于喜欢命令行工具的用户来说,还有另一种方法。

使用 ABP CLI

您可以使用ABP CLI 中的new命令创建新的解决方案。打开命令行终端并在空目录中键入以下命令:
abp new ProductManagement
ProductManagement是解决方案名称。此命令默认使用带有 EF Core 的 SQL Server LocalDB 和 MVC/Razor 页面 UI 创建 Web 应用。如果我想指定选项,我可以重写相同的命令,如下所示:
abp new ProductManagement -t app -u mvc -d ef -dbms SqlServer --mobile none
如果要指定数据库连接字符串,也可以传递--connection-string参数,如下例所示:
abp new ProductManagement -t app -u mvc -d ef -dbms SqlServer --mobile none --connection-string "Server=(LocalDb)\\MSSQLLocalDB;Database=ProductManagement;Trusted_Connection=True"
我们现在拥有一个架构完善、可用于生产的解决方案ProductManagement。下一节将展示如何运行此解决方案。

运行解决方案

我们使用 Visual Studio 或代码编辑器打开解决方案ProductManagement.sln、创建数据库并运行 Web 应用程序。您将看到如下图所示的解决方案结构:
该解决方案是包含多个项目的分层结构。测试文件夹包含测试这些对应层的项目。这些项目中有一些是类库,有一些是可执行应用程序:
  • ProductManagement.Web是 Web 应用程序。
  • ProductManagement.DbMigrator用于应用数据库迁移和种子数据初始化。
在创建数据库之前,您可能需要检查并更改数据库连接字符串。

连接字符串

连接字符串在ProductManagement.WebProductManagement.DbMigrator项目的appsettings.json文件中定义,包括服务器、数据库名称和凭据。如以下代码片段所示:
"ConnectionStrings": {
  "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=ProductManagement;Trusted_Connection=True"
}
默认连接字符串使用LocalDb,一个轻量级、与 SQL Server 兼容的数据库。它安装在 Visual Studio 中。如果要连接到另一个 SQL Server 实例,需要更改连接字符串。

创建数据库

该解决方案使用 EF Core 的 Code First 进行数据库迁移。因此,我们可以使用标准Add-MigrationUpdate-Database命令来管理数据库更改。
ProductManagement.DbMigrator是一个控制台应用程序,可简化在开发和生产环境中创建和迁移数据库。它还提供数据初始化,比如创建默认登录使用到的admin用户和角色。
右键单击该ProductManagement.DbMigrator项目并选择设置为启动项目命令。然后,使用Ctrl+F5运行项目,无需调试即可运行。
 
关于初始迁移
如果您使用的是 Visual Studio 以外的 IDE(例如 JetBrains Rider),则首次运行可能会遇到问题。在这种情况下,可以在项目ProductManagement.DbMigrator目录中打开一个命令行终端并执行dotnet run命令。下次,您就可以像往常一样在 IDE 中运行它。
数据库已经准备好了,我们可以运行应用程序来查看界面 UI了。

运行 Web 应用程序

设置ProductManagement.Web为启动项目,并使用Ctrl+F5运行它(无需调试即可启动)。
温馨提示:Ctrl+F5,不调试运行
除非调试它们,否则强烈建议在不调试的情况下运行应用程序,因为这样会快得多。
接着会打开一个登录页面,如以下屏幕截图所示:

默认用户名是admin,默认密码是1q2w3E*。可以在登录之后进行更改。
ABP 是一个模块化框架,启动解决方案已经安装了基础模块。在开始构建您的应用程序之前,最好先探索一下预构建的模块功能。

探索预构建模块

译者点评:本小结非常之简单,是针对小白用户,对于大部分读者,我感觉都是可以快速过一遍。
本小节将简单了解一下解决方案中预安装的模块:AccountIdentityTenant Management
这些模块的源码可在 GitHub 上免费找到,在NuGet上也可以获取最新发布的版本。若非必要,我们其实无需接触源码,因为它们是高度可扩展和可定制的。当然,您也可以将它们的源代码包含在解决方案中,方便自己自由更改它们。
下面让我们从用户身份验证的 Account 模块开始。

账户模块

该模块实现了登录、注册、忘记密码等功能。它还显示了一个租户选择,用于在多租户的开发环境中切换租户。多租户将在[第 16 章] 实现多租户中详细介绍。
当您登录完成后,您将看到一个带有子菜单的管理项。这些菜单项是 ABP 预构建的身份租户管理模块。

身份模块

身份模块用于管理用户、角色及其权限应用。它在Administration菜单下添加了一个Identity management菜单项,其中RolesUsers是它的子菜单,如下图所示:
如果您单击“角色”菜单项,则会打开角色管理页面,如下图所示:
在此页面上,您可以管理应用程序中的角色及权限。在 ABP 中,角色是一组权限,角色是分配给用户的。图中的Default表示默认角色。当新用户注册到系统时,会自动分配给他们默认角色。
另外,一个用户可以有零个或多个角色。
角色和用户几乎在所有应用程序中都是相当标准的,这里不做赘述。

租户管理模块

租户管理模块是您在多租户系统中创建和管理租户的地方。在多租户中,租户与其他租户的数据是完全隔离的(包括角色、用户和权限)。如果你的应用程序不想要多租户,您可以从解决方案中删除此模块。

概括

在本文中,我们准备了一些必要的开发工具和开发环境。然后,我们了解了如何在官网直接下载解决方案和使用ABP CLI 创建解决方案。最后,我们配置、运行并了解了基础的功能。
在下一章中,我们将了解解决方案的结构,并学习如何将我们自己的功能模块集成到这个启动解决方案中。
 
 
 

ABP框架入门的更多相关文章

  1. 基于ASP.NET MVC的ABP框架入门学习教程

    为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加, ...

  2. ABP框架入门踩坑-配置数据库表前缀

    配置数据库表前缀 ABP踩坑记录-目录 本篇其实和ABP关系并不大,主要是EF Core的一些应用-.-. 起因 支持数据库表前缀应该是很多应用中比较常见的功能,而在ABP中并没直接提供这一功能,所以 ...

  3. ABP框架入门踩坑-添加实体

    添加实体 ABP踩坑记录-目录 这里我以问答模块为例,记录一下我在创建实体类过程中碰到的一些坑. 审计属性 具体什么是审计属性我这里就不再介绍了,大家可以参考官方文档. 这里我是通过继承定义好的基类来 ...

  4. ABP框架入门踩坑-配置User Secrets

    配置User Secrets ABP踩坑记录-目录 起因 因为以往习惯在User Secrets中保存连接字符串之类信息,但当我把连接字符串移到secrets.json中后,却发现在迁移过程中会报如下 ...

  5. ABP框架入门踩坑-使用MySQL

    使用MySQL ABP踩坑记录-目录 起因 因为我自用的服务器只是腾讯云1核1G的学生机,不方便装SQL Server,所以转而MySQL. 这里使用的MySQL版本号为 8.0. 解决方案 删除Qi ...

  6. Asp.NET Core2.0与 EF的ABP框架入门视频教程

    https://ke.qq.com/course/287301?from=qqchat&ADUIN=1187219916&ADSESSION=1522716499&ADTAG= ...

  7. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  8. ABP CORE 框架入门视频教程《电话薄》基于 Asp.NET Core2.0 EF Core

    ABP框架简介 ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行 ...

  9. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

随机推荐

  1. c#的委托实例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. SpringAOP--aop使用

    SpringAOP使用方式 切点表达式 常用的符号: *:匹配任何数量字符: ..:匹配任何数量字符的重复,如在类型模式中匹配任何数量子包:而在方法参数模式中匹配任何数量参数. +:匹配指定类型的子类 ...

  3. Idea集成CSSO插件压缩css文件

    首先需要本地已安装node环境,并且csso-cli已通过npm安装到本地目录,只要能找到就行. 1. 打开Settings配置,确认图中的 File Watchers 插件是否已存在,如果不存在,去 ...

  4. 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法?

    通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间:而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集 ...

  5. spring-boot-learning自动配置原理

    启动器: spring-boot-starter:spring-boot场景启动器,帮我们倒入我们场景需要的组件依赖 不同的场景有不同的启动器: spring-boot-starter-web     ...

  6. 一个看一次就永远不会忘的windows环境开发小技巧

    前言:本人前端开发,在日常开发中需要打开多个窗口进行开发,如:本地服务窗口,ide工具,设计图,prd文档,浏览器,浏览器调试工具: 如此多的窗口同时打开并且时常需要查看的情况下,遗憾的是,即使我是双 ...

  7. 微信小程序——gulp处理文件

    懒癌直接贴代码,想写在写因为最近搞了一下小程序,直接使用微信的开发者工具搞感觉有点不习惯,并且看了几篇给小程序瘦身的博客,决定给自己的项目做一套配置文件,使用gulp来支持sass scss文件编译以 ...

  8. 访问控制中默认,public,private,protected区别?

    2.继承的访问控制: (比如一个类中的protected成员对于"不同的包中的非子类"是不可见的. 说明:1.任何public的内容可以被从任何地方访问. 2.private的成员 ...

  9. Blazor组件自做一 : 使用JS隔离封装viewerjs库

    Viewer.js库是一个实用的js库,用于图片浏览,放大缩小翻转幻灯片播放等实用操作 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazo ...

  10. FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言

    之前文章FastAPI(七十三)实战开发<在线课程学习系统>接口开发-- 回复留言,那么我们这次分享删除留言接口的开发 可以对留言进行删除,这里的删除,我们使用的是逻辑的删除,不是物理删除 ...