[ABP教程]第七章 作者:数据库集成
Web开发教程7 作者:数据库集成
关于此教程
在这个教程系列中,你将要构建一个基于ABP框架的应用程序 Acme.BookStore。这个应用程序被用于甘丽图书页面机器作者。它将用以下开发技术:
- Entity Framework Core 作为数据提供器
- MVC / Razor Pages 作为UI框架
这个教程全部由下面几个部分构成:
- 第一章:创建服务端
- 第二章:构建书籍列表页面
- 第三章:增删改图书
- 第四章:集成测试
- 第五章:授权
- 第六章:领域层
- 第七章:数据库集成(本教程)
- 第八章:应用层
- 第九章:用户接口
- 第十章:预定作者关系
下载源码
教程根据您的UI和数据库首选项有多个版本。我们准备了一些可供下载的源码组合:
- MVC(Razor Pages)界面和EFCore版本
- Blazor和EF Core版本
- Angular和MongoDB版本
导论
这部分教程说明了怎么为上一步介绍的Author实体配置数据库集成 。
数据库上下文对象
在项目 .BookStore.EntityFrameworkCore 中打开文件BookStoreDbCOntext* ,添加下方的DbSet属性
public DbSet<Author> Authors {get;set;}
然后打开类 BookStoreDbContextModelCreatingExtentions 修改其方法 ConfigureBookStore 内容:
builder.Entity<Author>(b =>
{
b.ToTable(BookStoreConsts.DbTablePrefix + "Authors",
BookStoreConsts.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.Name)
.IsRequired()
.HasMaxLength(AuthorConsts.MaxNameLength);
b.HasIndex(x => x.Name);
});
这个和之前的Book实体的操作类似,只是做相应的配置
创建新的数据库迁移
打开包管理器控制台(Package Manager Console ),
然后设置默认项目为 *.BookStore.EntityFrameworkCore.DbMigrations
另外需要设置默认项目为*.BookStore.Web(或HttpApi.Host)
然后运行迁移命令
Add_Migration "Added_Authors"
这个操作将创建一个新的迁移类,然后运行命令 Update-Database 在数据库中创建新表
实现IAuthorRepository接口
在项目 *.BookStore.EntityFrameworkCore 创建名为 EfCoreAuthorRepository 的类,然后参考下方的实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Acme.BookStore.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Acme.BookStore.Authors
{
public class EfCoreAuthorRepository
: EfCoreRepository<BookStoreDbContext, Author, Guid>,
IAuthorRepository
{
public EfCoreAuthorRepository(
IDbContextProvider<BookStoreDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public async Task<Author> FindByNameAsync(string name)
{
return await DbSet.FirstOrDefaultAsync(author => author.Name == name);
}
public async Task<List<Author>> GetListAsync(
int skipCount,
int maxResultCount,
string sorting,
string filter = null)
{
return await DbSet
.WhereIf(
!filter.IsNullOrWhiteSpace(),
author => author.Name.Contains(filter)
)
.OrderBy(sorting)
.Skip(skipCount)
.Take(maxResultCount)
.ToListAsync();
}
}
}
- 继承自EfCoreAuthorRepository ,因此继承了标准仓储方法的实现
- WhereIf 是ABP框架的扩展方法,仅在第一个条件满足下才添加Where条件 (译者:Freesql也有类似的设计)
- sorting 可以是 Name
,
Name ASCor
Name DESC。基于包System.Linq.Dynamic.Core 方法
如果,您认为阅读这篇博客让您有些收获,不妨点击一下下方【推荐】按钮。
如果,您希望获取更新的博客,不妨点击下方的的 【关注我】。
如果,博文能对您有所帮助,想给予我更多的鼓励,右方【打赏】随时为您开放(萌萌脸)
本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权
专注更高率,自律更自信