前の章によると: 【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.Host
5. ここで、Swagger と権限管理Acme.BookStore.AuthServer
という2 つのソリューションを開始しました。HttpApi.Host
AuthServer