zoukankan      html  css  js  c++  java
  • [ABP教程]第七章 作者:数据库集成

    Web开发教程7 作者:数据库集成

    关于此教程

    在这个教程系列中,你将要构建一个基于ABP框架的应用程序 Acme.BookStore。这个应用程序被用于甘丽图书页面机器作者。它将用以下开发技术:

    • Entity Framework Core 作为数据提供器
    • MVC / Razor Pages 作为UI框架

    这个教程全部由下面几个部分构成:

    • 第一章:创建服务端
    • 第二章:构建书籍列表页面
    • 第三章:增删改图书
    • 第四章:集成测试
    • 第五章:授权
    • 第六章:领域层
    • 第七章:数据库集成(本教程)
    • 第八章:应用层
    • 第九章:用户接口
    • 第十章:预定作者关系

    下载源码

    教程根据您的UI和数据库首选项有多个版本。我们准备了一些可供下载的源码组合:

    • MVC(Razor Pages)界面和EFCore版本
    • Blazor和EF Core版本
    • Angular和MongoDB版本

    导论

    这部分教程说明了怎么为上一步介绍的Author实体配置数据库集成 。

    数据库上下文对象

    在项目 .BookStore.EntityFrameworkCore 中打开文件BookStoreDbCOntext* ,添加下方的DbSet属性

    public DbSet<Author> Authors {get;set;}
    

    然后打开类 BookStoreDbContextModelCreatingExtentions 修改其方法 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实体的操作类似,只是做相应的配置

    创建新的数据库迁移

    打开包管理器控制台(Package Manager Console ),

    然后设置默认项目为 *.BookStore.EntityFrameworkCore.DbMigrations

    另外需要设置默认项目为*.BookStore.Web(或HttpApi.Host)

    image-20201224111200445

    然后运行迁移命令

    Add_Migration "Added_Authors"
    

    image-20201224111945993

    这个操作将创建一个新的迁移类,然后运行命令 Update-Database 在数据库中创建新表

    image-20201224112530097

    实现IAuthorRepository接口

    在项目 *.BookStore.EntityFrameworkCore 创建名为 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条件 (译者:Freesql也有类似的设计)
    • sorting 可以是 Name, Name ASCorName DESC。基于包System.Linq.Dynamic.Core 方法
  • 相关阅读:
    美团DSP
    pid稳态控制
    Tensorflow的gRPC编程(一)
    信息增益,信息增益率
    tensorflow dnn 参考
    java tfserving grpc 通信调用代码解析 【重点参考】
    Saltstack module dnsmasq 详解
    Saltstack module django 详解
    Saltstack module disk 详解
    Saltstack module dig 详解
  • 原文地址:https://www.cnblogs.com/LandWind/p/abp-tutorial-part-7.html
Copyright © 2011-2022 走看看