您当前的位置: 首页 >  数据库

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

寒冰屋 发布时间:2020-09-26 21:06:33 ,浏览量:0

文章目录
  • 关于本教程
    • 下载源代码
  • 介绍
  • 数据库上下文
  • 创建一个新的数据库迁移
  • 实现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可以是一个字符串,如NameName ASCName DESC。通过使用System.Linq.Dynamic.Core NuGet包是可能的。

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

下一部分

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

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0438s