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

关于本教程

本教程基于版本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集成文档

下一部分

请参阅本教程的下一部分

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值