- 关于本教程
- 下载源代码
- 介绍
- 数据库上下文
- 创建一个新的数据库迁移
- 实现IAuthorRepository
- 下一部分
本教程基于版本3.1
在本教程系列中,您将构建一个名为Acme.BookStore
的基于ABP的Web应用程序。该应用程序用于管理书籍及其作者的列表。它是使用以下技术开发的:
- 实体框架核心作为ORM提供者。
- MVC/Razor页面作为UI框架。
本教程分为以下部分:
第1部分:创建服务器端
第2部分:书籍列表页面
第3部分:创建、更新和删除书籍
第4部分:集成测试
第5部分:授权
第6部分:作者:领域层
第7部分:作者:数据库集成(此部分)
第8部分:作者:应用程序层
第9部分:作者:用户界面
第10部分:书与作者的关系
下载源代码MVC (Razor Pages) UI with EF Core
介绍本部分说明如何为上一部分介绍的Author
实体配置数据库集成。
在Acme.BookStore.EntityFrameworkCore
项目中打开BookStoreDbContext
并添加以下DbSet
属性:
public DbSet Authors { get; set; }
然后在同一项目中打开BookStoreDbContextModelCreatingExtensions
类,并将以下行添加到ConfigureBookStore
方法的末尾:
builder.Entity(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
实体所做的一样,因此无需再次解释。
在Visual Studio上打开包管理器控制台,并确保在包管理器控制台中的默认的项目是Acme.BookStore.EntityFrameworkCore.DbMigrations
,如下图所示。另外,将设置Acme.BookStore.Web
为启动项目(在解决方案资源管理器中右键单击它,然后单击“设置为启动项目”)。
运行以下命令以创建新的数据库迁移:
这将创建一个新的迁移类。然后运行Update-Database
命令在数据库上创建表。
有关EF Core数据库迁移的更多信息,请参见Microsoft文档。
实现IAuthorRepository在Acme.BookStore.EntityFrameworkCore
项目内部(在Authors
文件夹中)创建一个命名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,
IAuthorRepository
{
public EfCoreAuthorRepository(
IDbContextProvider dbContextProvider)
: base(dbContextProvider)
{
}
public async Task FindByNameAsync(string name)
{
return await DbSet.FirstOrDefaultAsync(author => author.Name == name);
}
public async Task 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
条件(仅提供过滤器时,它才按名称过滤)。您可以自己做同样的事情,但是这些快捷方式使我们的生活更轻松。 -
sorting
可以是一个字符串,如Name
,Name ASC
或Name DESC
。通过使用System.Linq.Dynamic.Core NuGet包是可能的。
有关基于EF Core的存储库的更多信息,请参阅EF Core集成文档。
下一部分请参阅本教程的下一部分。