5)内容系统表的搭建&自定义仓储CURD
本来是想使用abp的CMS模块但发现里面的东西有点多也不太符合我现有网站的数据结构,有兴趣的小伙伴可下载abp源码看看,里面有很多值得借鉴的地方


下面列一下个人网站博客框架一些常用的功能(可借鉴abp cms ~):
内容
分类
标签
动态页面
轮播图(广告轮播)
导航菜单(可有可无)
评论 (不需要,后面有空单独做个评论系统的功能)
在 YiAim.Cms.Domain项目新建 Blogs文件夹用于存放所有cms相关的实体表
Blog(内容)、Category(分类)这里允许文章里面分类为空
Tag 标签
TagMap 标签与文章关联表
在YiAim.Cms.EntityFrameworkCore\CmsDbContext 里面的 OnModelCreating 方法配置
进行数据迁移,生成表如下

自定义仓储接口
在YiAim.Cms.Domain\Blogs文件夹里面新建IRepositories文件夹用于存放blog相关的自定义仓储 如:IBlogRepository 继承IBasicRepository或者 IRepository
abp框架中已经默认给我们实现了默认的通用(泛型)仓储
IRepository<TEntity, TKey>
,有着标准的CRUD操作,具体可以在:https://docs.abp.io/zh-Hans/abp/latest/Repositories 查看更多 之所以实现自定义仓储是因为有些东西是abp没有给我们,如实现批量插入、更新的方法;(微软官方推荐的EFCore的工具与扩展 https://learn.microsoft.com/zh-cn/ef/core/extensions/)
IBlogRepository.cs
既然定义了仓储那就实现,不然调用的时候会报错
在YiAim.Cms.EntityFrameworkCore里面新建 Repositories文件夹,里面新建BlogRepository.cs 使用 EF Core 需要继承 EfCoreRepository<TDbContext, TEntity, TKey>
和自定义仓储接口IXxxRepository
BlogRepository.cs
接下来在就可以在.Application服务层愉快的读取数据了,写服务之前,先分析项目需要哪些功能业务。由于是个人网站(博客项目),无非就是增删改查,后期对网站进行优化是添加缓存、定时任务之类的功能一个简单的网站差不多就成型了。
在YiAim.Cms.Application.Contracts定义api接口、DTO模型 (DTO就是从我们的领域模型中抽离出来的对象,它只包含我们要拿的数据,不参杂任何行为逻辑) 新建Blogs文件夹,然后再来新建IBlogService继承IApplicationService,里面定义我们业务需要的数据接口
在YiAim.Cms.Application实现接口
新建Blogs文件夹,然后再来新建BlogService继承ApplicationService,IBlogService
测试调用
在Controller中调用,可以直接注入服务的方式实现 如:在 YiAim.Cms.HttpApi ,新建Controller
HelloAbpController.cs 继承 CmsController,CmsController为创建abp项目默认有的一个基类,它里面已经默认继承了abp的基类
//CmsController
然后运行项目,访问 https://localhost:44377/HelloAbp/test
就可以看到结果了(前提是你的数据库里面有内容)


总计 abp的数据访问
1.创建实体,完成实体与数据库表的映射关系
2.自定义仓储方法及实现对应的读取方法,一般来说使用abp提供的仓储方法已经够小型的项目使用
最后,abp提供了 自动API控制器,不需要我们写controller,直接在服务层配置就可以自动生成api接口,详情请看 https://docs.abp.io/zh-Hans/abp/latest/API/Auto-API-Controllers
后面我们的这个项目也基本使用这种模式开发,减少工作量&也方便测试。
在来看一下 自动api控制器生成的api接口,打开swagger就可以看到对应api,还可以方便测试。

此时整个项目目录结构如下:

本章已经完成了表的搭建&自定义仓储CURD,Entity Framework Core的数据访问,由于代码太多这里就不全部帖出来,相信各位小伙伴都能完成。有需要的也可以直接拉取项目。下章我们将对接vue项目完成UI界面的操作。