C#Abp框架⼊门系列⽂章(⼀)
随着技术的进步,各式各样的框架层出不穷,轮⼦越来越多,那么有没有哪些优秀的开发框架供我们使⽤呢?如果我们能够将各⽅⾯优秀的框架集合起来,应⽤到项⽬开发中,我们的⼯作是不是能事半功倍呢?⽽且各个框架的使⽤⽅向不同,很多配置也不同,如果能够将繁杂的基础⼯作集成起来,由统⼀的框架来完成,那么我们就可以专注于业务逻辑,提⾼⼯作效率。现在Abp就是这么⼀个框架,使⽤流⾏技术开发现代web应⽤程序的最佳实践。本⽂作为Abp框架的⼊门⽂章,仅供学习分享使⽤,如有不⾜之处,还请指正。
什么是Abp?
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项⽬)”的简称。数据库学习入门书籍
ASP.NET Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序框架和项⽬模板。ABP是基于最新的ASP.NET CORE,ASP.NET MVC和Web API技术的应⽤程序框架。并使⽤流⾏的框架和库,它提供了便于使⽤的授权,依赖注⼊,验证,异常处理,本地化,⽇志记录,缓存等常⽤功能。
Abp架构
ABP实现了多层架构(领域层,应⽤层,基础设施层和表⽰层),以及领域驱动设计(实体,存储库,领域服务,应⽤程序服务,DTO等)。还实现和提供了良好的基础设施来实现最佳实践,如依赖注⼊。
了解了Abp框架的基础知识之后,让我们⼀步⼀步的搭建Abp框架,并实现⼀个简单的⼩例⼦。
安装CLI
输⼊cmd打开命令⾏窗⼝,然后输⼊以下命令,安装Abp.Cli,如下所⽰:
1 dotnet tool install -g Volo.Abp.Cli
安装过程,如下图所⽰:
创建第⼀个Abp项⽬
在命令⾏,切换到程序所在⽬录【最好是空⽬录】,然后通过命令进⾏创建,如下所⽰:
1 abp new Acme.BookStore
安装过程,如下图所⽰:
关于Abp的Cli相关命令,可参考。
项⽬创建成功后,如下所⽰:
通过Visual Studio打开解决⽅案,如下所⽰:
还原数据库
在Abp解决⽅案中,通过运⾏【Acme.BookStore.DbMigrator】进⾏初始化数据库。该项⽬是控制台程序,采⽤Entity Framework的Code First⽅式迁移数据库。打开项⽬【Acme.BookStore.DbMigrator】中 appsettings.json⽂件,修改数据库连接字符串,为本机连接字符串,如下所⽰:
将项⽬设置为启动项⽬,然后F5(或Ctrl + F5)运⾏即可。当出现以下页⾯时,表⽰数据库迁移成功。如下所⽰:
数据库还原成功后,打开SQL Server数据库,会多出⼀个数据库【BookStore】,如下所⽰:
注意:最新版本的Abp版本为5.0.0,⽀持的Entity Framework Core版本为6.0,⽬前已不再⽀持SQL Server 2008 R2。所以需要升级数据库版本到2012。运⾏Abp程序
打开项⽬【Acme.BookStore.Web】中的appsettings.json⽂件,修改数据库连接字符串,如下所⽰:
在⾸页上,点击登录【默认⽤户名 admin,密码 1q2w3E* 】,如下所⽰:
登录成功后,如下所⽰:
以上就是Abp最新默认框架⽰例。接下来让我们⼀起开发⼀个图书管理的⼩功能。
Abp⼊门⽰例
1. 创建Book实体类
启动模板中的领域层分为两个项⽬:
Acme.BookStore.Domain包含你的实体, 领域服务和其他核⼼域对象.
Acme.BookStore.Domain.Shared包含可与客户共享的常量,枚举或其他域相关对象.
在解决⽅案的领域层(Acme.BookStore.Domain项⽬)中定义实体,如下所⽰:
在Acme.BookStore.Domain项⽬中,右键创建⽂件夹Books,然后新增Book类,如下所⽰:
1namespace Acme.BookStore.Books
2 {
3public class Book : AuditedAggregateRoot<Guid>
4 {
5public string Name { get; set; }
6
7public BookType Type { get; set; }
8
9public DateTime PublishDate { get; set; }
10
11public float Price { get; set; }
12 }
13 }
其中Book继承⾃AuditedAggregateRoot<Guid>。在Abp中,默认提供了两个实体基类AggregateRoot和Entity,⽽AuditedAggregateRoot<Guid>是AggregateRoot的派⽣类。其中Guid是主键类型。上述类中⽤到的BookType为创建的枚举类型,在Acme.BookStore.Domain.Shared项⽬中,如下所⽰:
1namespace Acme.BookStore.Books
2 {
3public enum BookType
4 {
5 Undefined,
6 Adventure,
7 Biography,
8 Dystopia,
9 Fantastic,
10 Horror,
11 Science,
12 ScienceFiction,
13 Poetry
14 }
15 }
Book和BookType,如下所⽰:
2. 将Book实体添加到DbContext中
EF Core需要你将实体和 DbContext 建⽴关联.最简单的做法是在Acme.BookStore.EntityFrameworkCore项⽬的BookStoreDbContext类中添加DbSet属性.如下所⽰:
1namespace Acme.BookStore.EntityFrameworkCore
2 {
3 [ReplaceDbContext(typeof(IIdentityDbContext))]
4 [ReplaceDbContext(typeof(ITenantManagementDbContext))]
5 [ConnectionStringName("Default")]
6public class BookStoreDbContext :
7 AbpDbContext<BookStoreDbContext>,
8 IIdentityDbContext,
9 ITenantManagementDbContext
10 {
11/* Add DbSet properties for your Aggregate Roots / Entities here. */
12
13#region Entities from the modules
14//其他⾃带的已略去
15///<summary>
16/// Book⽰例数据库操作
17///</summary>
18public DbSet<Book> Books { get; set; }
19
20#endregion
21
22
23
24 }
25 }
3. 将Book实体映射到数据库表
在本⽰例中采⽤Code First⽅式⾃动⽣成数据库,所以需要将实体和数据库表进⾏映射。在 Acme.BookStore.EntityFrameworkCore 项⽬中打开 BookStoreDbContextModelCreatingExtensions.cs ⽂件,添加 Book 实体的映射代码. 最终类应为:
1namespace Acme.BookStore.EntityFrameworkCore
2 {
3public static class BookStoreDbContextModelCreatingExtensions
4 {
5public static void ConfigureBookStore(this ModelBuilder builder)
6 {
7 Check.NotNull(builder, nameof(builder));
8
9/* Configure your own tables/entities inside here */
10
11 builder.Entity<Book>(b =>
12 {
13 b.ToTable(BookStoreConsts.DbTablePrefix + "Books",
14 BookStoreConsts.DbSchema);
15 b.ConfigureByConvention(); //auto configure for the base class props
16 b.Property(x => x.Name).IsRequired().HasMaxLength(128);
17 });
18 }
19 }
20 }
BookStoreConsts 含有⽤于表的架构和表前缀的常量值. 你不必使⽤它,但建议在单点控制表前缀.
ConfigureByConvention() ⽅法优雅的配置/映射继承的属性,应始终对你所有的实体使⽤它.
3. 添加数据迁移
启动模板使⽤EF Core Code First Migrations创建和维护数据库架构. 我们应该创建⼀个新的迁移并且应⽤到数据库.
在 Acme.BookStore.EntityFrameworkCore ⽬录打开命令⾏终端输⼊以下命令:
1 dotnet ef migrations add Created_Book_Entity
具体⽰例如下所⽰:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论