文章目录
关于本教程下载源代码介绍数据库上下文创建一个新的数据库迁移实现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<Author> Authors {get; set; }
然后在同一项目中打开BookStoreDbContextModelCreatingExtensions
类,并将以下行添加到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
实体所做的一样,因此无需再次解释。
创建一个新的数据库迁移
在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<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
条件(仅提供过滤器时,它才按名称过滤)。您可以自己做同样的事情,但是这些快捷方式使我们的生活更轻松。
sorting
可以是一个字符串,如Name
,Name ASC
或Name DESC
。通过使用System.Linq.Dynamic.Core NuGet包是可能的。
有关基于EF Core的存储库的更多信息,请参阅EF Core集成文档。
下一部分
请参阅本教程的下一部分。