欢迎光临散文网 会员登陆 & 注册

5)内容系统表的搭建&自定义仓储CURD

2022-11-05 22:30 作者:紫檀清香  | 我要投稿

本来是想使用abp的CMS模块但发现里面的东西有点多也不太符合我现有网站的数据结构,有兴趣的小伙伴可下载abp源码看看,里面有很多值得借鉴的地方

abp源码
abp cms源码

下面列一下个人网站博客框架一些常用的功能(可借鉴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 就可以看到结果了(前提是你的数据库里面有内容)

结果1
结果

总计 abp的数据访问

  • 1.创建实体,完成实体与数据库表的映射关系

  • 2.自定义仓储方法及实现对应的读取方法,一般来说使用abp提供的仓储方法已经够小型的项目使用

最后,abp提供了 自动API控制器,不需要我们写controller,直接在服务层配置就可以自动生成api接口,详情请看 https://docs.abp.io/zh-Hans/abp/latest/API/Auto-API-Controllers

后面我们的这个项目也基本使用这种模式开发,减少工作量&也方便测试。

在来看一下 自动api控制器生成的api接口,打开swagger就可以看到对应api,还可以方便测试。

结果2

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

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



5)内容系统表的搭建&自定义仓储CURD的评论 (共 条)

分享到微博请遵守国家法律