1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Abp vnext Web应用程序开发教程 7 —— 作者:数据库集成

Abp vnext Web应用程序开发教程 7 —— 作者:数据库集成

时间:2023-06-20 16:42:40

相关推荐

Abp vnext Web应用程序开发教程 7 —— 作者:数据库集成

文章目录

关于本教程下载源代码介绍数据库上下文创建一个新的数据库迁移实现IAuthorRepository下一部分

关于本教程

本教程基于版本3.1

在本教程系列中,您将构建一个名为Acme.BookStore的基于ABPWeb应用程序。该应用程序用于管理书籍及其作者的列表。它是使用以下技术开发的:

实体框架核心作为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可以是一个字符串,如NameName ASCName DESC。通过使用System.Linq.Dynamic.Core NuGet包是可能的。

有关基于EF Core的存储库的更多信息,请参阅EF Core集成文档。

下一部分

请参阅本教程的下一部分。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。