首先介绍下项目下的几个类库
*****.Application :应用层 编写自动控制器service的地方
*****.Contracts:存放dto实体(比如保存数据时不需要保存id我们dto实体中没有id属性)
*****.Domain:领域层 存放实体类
*****.Domain.Shared:理解为共享域(比如存放一些枚举类)
*****.EntityFrameworkCore:如果使用code first方式此类库需要映射表
*****.EntityFrameworkCore.DbMigrations: 基础层 后续做操作更新数据库使用类库
EntityFrameworkCore/Test11111DbContext.cs文件 EntityFrameworkCore/Test11111DbContextModelCreatingExtensions.cs
*****.HttpApi.Host:启动项目所有控制器存放地。指向swagger
1.首先在.Domain类库中创建实体
using Volo.Abp.Domain.Entities.Auditing;
Book继承聚合根
2.在.Shared中创建BookType
3.在.EntityFrameworkCore添加映射
4.在程序包管理器控制台选择.EntityFrameworkCore.DbMigrations 执行 add-migration "所作的操作",update-database成功后会弹出执行文件
查看数据库生成了AppBooks表
5.在.Application.Contracts创建Dto实体以便后期增删改查使用
using Volo.Abp.Application.Dtos;
BookDto继承实体Dto
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
官方文档中提到
- 框架定义应用程序服务的接口不是必需的. 但是,它被建议作为最佳实践.
ICrudAppService
定义了常见的CRUD方法:GetAsync
,GetListAsync
,CreateAsync
,UpdateAsync
和DeleteAsync
. 你可以从空的IApplicationService
接口继承并手动定义自己的方法(将在下一部分中完成).ICrudAppService
有一些变体, 你可以在每个方法中使用单独的DTO,也可以分别单独指定(例如使用不同的DTO进行创建和更新).
所以此接口可以不必创建
6.在.Application类库中的****ApplicationAutoMapperProfile中添加实体对Dto的映射关系,不然调用自动控制器时会报错