【ABP Vnext】ビジネスインターフェースを実現するCRUDの運用プロセス

前の章によると: 【abp Vnext】abp Vnext プロジェクトの詳細なチュートリアル ドキュメントをダウンロードして実行します。
このサンプル プロジェクトは Gitee にアップロードされています: https://gitee.com/henrryhu/acme.-book-store

次に、デモンストレーションを行います

エンティティの作成、
DTO の構築、
DTO とエンティティ変換マッピングの設定、
エンティティの DbSet 属性の追加、
オープン インターフェイスの宣言、
インターフェイスのカプセル化の実現、
新しいエンティティの作成後のデータベース移行の生成

現在の解決策は次のとおりです。
ここに画像の説明を挿入

1. エンティティの構築

ソリューションではAcme.BookStore.Domain、新しいフォルダー Com を作成し、フォルダー内に新しいエンティティ クラスを作成します。MuenList
ここに画像の説明を挿入

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.MultiTenancy;

namespace Acme.BookStore.Com
{
    
    
    /// <summary>
    /// 菜单
    /// </summary>
    [Table("MuenList")]
    [Description("菜单表")]
    public class MuenList:ComBase<Guid>,IMultiTenant
    {
    
    
        [Key]
        public Guid Id {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [StringLength(50)]
        [Description("菜单名称")]
        public string Title {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Description("菜单代码")]
        public string Key {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Description("菜单图标")]
        public string IconType {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Description("菜单路径")]
        public string Path {
    
     get; set; }
        / <summary>
        / 菜单名称
        / </summary>
        //public List<MuenList> Children { get; set; }
        /// <summary>
        /// 租户ID
        /// </summary>
        [Description("租户ID")]
        public Guid? TenantId {
    
     get; set; }
    }
}

2.DTOの構築

Acme.BookStore.Application.Contractsソリューションの下に、新しい COM フォルダーを作成し、新しいMuenListDtoクラスを作成します。
ここに画像の説明を挿入

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Text;
using System.ComponentModel.DataAnnotations.Schema;

namespace Acme.BookStore.COM
{
    
    
    /// <summary>
    /// 菜单
    /// </summary>
    public class MuenListDto: ComBaseDto
    {
    
    
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Column("菜单名称")]
        public string Title {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Column("菜单代码")]
        public string Key {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Column("菜单图标")]
        public string IconType {
    
     get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>
        [Column("菜单路径")]
        public string Path {
    
     get; set; }
        /// <summary>
        /// 租户ID
        /// </summary>
        public Guid? TenantId {
    
     get; set; }
    }
}

3. DTO とエンティティ変換マッピングを設定する

Acme.BookStore.Applicationソリューションでは、BookStoreApplicationAutoMapperProfileクラス ファイルを入力し
ここに画像の説明を挿入
、次のコードを追加してエンティティと DTO 間のマッピングを実現します。

 CreateMap<MuenList, MuenListDto>().ReverseMap();

4. DbSet プロパティをエンティティに追加します

Acme.BookStore.EntityFrameworkCoreソリューションBookStoreDbContextクラス ファイルに
ここに画像の説明を挿入
DbSet 属性コードを追加します。

public DbSet<MuenList> MuenList {
    
     get; set; }

5. インターフェースを外部に公開することを宣言する

Acme.BookStore.Application.ContractsソリューションのCOM フォルダーの下に、新しいIMenuListAppServiceクラス ファイルを追加します。

ここに画像の説明を挿入

  public interface IMenuListAppService: IApplicationService
    {
    
    
         /// <summary>
        /// 新增接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<OutputBaseDto<MuenListDto>> CreateAsync(MuenListDto input);
    }

6. インターフェースのカプセル化を実現する

ソリューションではAcme.BookStore.Application、新しい COM フォルダーを作成し、カプセル化コードを実装するための新しいMenuListAppServiceファイル クラスを作成します
ここに画像の説明を挿入
。ここで、ビジネス インターフェイス CRUD をカスタマイズできます。

using Acme.BookStore.COM;
using AutoMapper.Internal.Mappers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users;

namespace Acme.BookStore.Com
{
    
    
    public class MenuListAppService : ApplicationService, IMenuListAppService
    {
    
    
        public readonly IRepository<MuenList, Guid> _MenuListRepository;

        public MenuListAppService(IRepository<MuenList, Guid> menuListRepository)
        {
    
    
            _MenuListRepository = menuListRepository;
        }

    

        /// <summary>
        /// 插入返回
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public  async Task<OutputBaseDto<MuenListDto>> CreateAsync(MuenListDto input)
        {
    
    
            var entity = ObjectMapper.Map<MuenListDto, MuenList>(input);
          
            Console.WriteLine(entity);
            await _MenuListRepository.InsertAsync(entity, autoSave: true);

            OutputBaseDto<MuenListDto> output = new OutputBaseDto<MuenListDto>();
            output.Data = ObjectMapper.Map<MuenList, MuenListDto>(entity);
            return output;
        }
    }
}

7. 新しいエンティティを作成した後にデータベース移行を生成する必要がある

[ツール] == "NuGet パッケージ マネージャー == "パッケージ マネージャー コンソール == "デフォルトのプロジェクトを選択し、Acme.BookStore.EntityFrameworkCore
ここに画像の説明を挿入
ターミナルで次のように入力してデータベース移行ファイルを生成します。

//add-migration  "迁移说明"
add-migration init

次にデータベースで実行します

update-database

ここに画像の説明を挿入
ここに画像の説明を挿入

8.注意点

1. 新しいエンティティを作成する場合のみ、移行データベース ファイルの生成を実行する必要があります

2. ビジネスインターフェイスのカプセル化は主にAcme.BookStore.Applicationソリューション内で実現されます

3.Acme.BookStore.Applicationソリューションに実装されているpublicパブリック インターフェイスの数、Acme.BookStore.Application.Contractsソリューション内でどのインターフェイスを宣言する必要があるか

4. ABP 公式ドキュメント: https://docs.abp.io/zh-Hans/abp/latest/Object-To-Object-Mapping

Acme.BookStore.HttpApi.Host5. ここで、Swagger と権限管理Acme.BookStore.AuthServerという2 つのソリューションを開始しました。HttpApi.HostAuthServer
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43861689/article/details/129945522