abp vnext 开发快速入门 2 实现基本增删改查
上篇说了abp vnext 的大体框架结构,本篇说下如何实现基础的增删改查。实现增删改查有以下几个步骤:
1、配置数据库连接
2、领域层(Domain)创建实体,Ef core 层配置Dbset( 用的Ef core code first) ,自动创建数据库和表
3、ApplicationContract 层编写Dto(数据传输对象)
4、Application 层设置AutoMap, 编写增删改查方法
5、运行宿主服务,这里用到了swagger,用swagger 进行测试。
我就一个一个步骤挨着说一下,首先第一个
1、配置数据库连接,找到宿主服务,上篇说道是.HttpApi.Host,这个项目下有个appsettings.json,这个文档里找到ConnectionStrings,默认生成的Default 和项目名相关的一个连接。主要是把项目名相关的这个数据库连接改成真实的,Default那个看心情改,目前没发现有什么用还。比如
"ConnectionStrings": { "Default": "Server=.;Database=SoftwarePortal_Main;User ID=sa;Password=123456;", "Test": "Server=.;Database=SoftwarePortal_Module;User ID=sa;Password=123456;" },
2、领域层创建实体
到Domain层创建要用到的实体。这块跟普通的netcore 差不多了,直接列代码,我这个代码是项目中的用到的 “类别”的实体。
[Table("Categories")]
public class Category : FullAuditedEntity<Guid>
{
/// <summary>
/// 类别名称
/// </summary>
[MaxLength(), Required]
public string CategoryName { get; set; }
/// <summary>
/// 父级
/// </summary>
[Required]
public Guid ParentID { get; set; }
/// <summary>
/// 排序
/// </summary>
[Required]
public int Sort { get; set; }
/// <summary>
/// 属性列表
/// </summary>
public IList<AttributeInfo> AttributeInfoList { get; set; }
/// <summary>
/// 属性组列表
/// </summary>
public IList<AttributeGroup> AttributeGroupList { get; set; }
}
以上可以发现继承了FullAuditedEntity<Guid>,之所以这样是因为可以用到abp框架里的自带的比如ID , IsDeleted,DeleterId,DeletionTime 等等这些,而且继承这个看文档说的用框架做删除操作。默认的不是真实删除,而是逻辑删除。
编写好实体后,Ef core 层写DbSet,主要在两个地方:
在DbContext类加上
public DbSet<Category> Categories { get; set; }
在DbContextModelCreatingExtensions类加上
builder.Entity<Category>();
加完这些就可以运行自动创建或更新数据库的命令了。
3、ApplicationContract 层 添加Dto,Dto是数据传输对象。这个应该很多人不陌生,就是用来接收前端传过来的数据或者把后端产生的数据转为前端能看的数据。可以通过Automap与后端数据进行数据转换。这里举例接收创建一个Category数据的Dto
public class CreateCategoryDto
{
/// <summary>
/// 类别名称
/// </summary>
[MaxLength(, ErrorMessage = "名称最长50"), Required(ErrorMessage = "名称必填")]
public string CategoryName { get; set; }
/// <summary>
/// 父级
/// </summary>
[Required(ErrorMessage = "上级必填")]
public Guid ParentID { get; set; }
/// <summary>
/// 排序
/// </summary>
[Required(ErrorMessage = "排序必填")]
public int Sort { get; set; }
}
通过这个Dto,可以实现数据接收,也能自动实现数据校验
4、编写好Dto后,在Application层下的AutomapperProfile文件里编写
CreateMap<CreateCategoryDto, Category>(MemberList.Source);
做下映射。
然后Application层下创建一个CategoryAppService 的类(这个类继承ApplicationService,否则无法直接用ObjectMapper),里边放关于Category的一系列操作的方法。比如创建操作方法
/// <summary>
/// 创建类别
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<ApiResponse> CreateAsync(CreateCategoryDto input)
{
var category = ObjectMapper.Map<CreateCategoryDto, Category>(input); var categoryAdd = await _categoryRepository.InsertAsync(category); return new ApiResponse("创建成功", ObjectMapper.Map<Category, CategoryDto>(categoryAdd),SoftwarePortalErrorCodes.Success);
}
其中 _categoryRepository 是这样声明的,利用了abp vnext自带的仓储
private readonly IRepository<Category, Guid> _categoryRepository;
public CategoryAppService(IRepository<Category, Guid> repository)
{
_categoryRepository = repository;
}
编写后呢就可以运行宿主服务测试刚刚创建好的这个服务了。
abp vnext 开发快速入门 2 实现基本增删改查的更多相关文章
- abp vnext 开发快速入门 1 认识框架
最近在做一个项目,用的框架是Abp vnext ,不是Abp, 我自己也是刚开始用这个框架来做项目,难免要查资料,这个框架官方有中文文档,可以到官网www.abp.io 去查看,国内也有一些写了相关的 ...
- abp vnext 开发快速入门 4 跨域设置
由于项目采用的微服务框架,前端与后端交互难免有跨域的问题.abp vnext实现跨域也很简单,只需要设置几处就可以了,这里只讲全局的跨域,至于局部的Action如何跨域请自行搜索.netcore 跨域 ...
- abp vnext 开发快速入门 3 实现权限控制
上篇讲了abp vnext 实现了简单的增加操作的例子.删除更新查询基本类似,这里就不讲了,接下来说下如何实现角色权限控制. 再说之前,先说下如果想更加透彻的理解abp vnext的权限控制,最好是先 ...
- android 入门 006(sqlite增删改查)
android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- 基于SpringBoot开发一个Restful服务,实现增删改查功能
前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...
- Web API开发实例——对产品Product进行增删改查
1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...
- VisualStudio2013内置SQLServer入门(二)--增删改查
前一篇 http://www.cnblogs.com/qixi233/p/4766451.html 这篇是sqlserver的操作 界面比较走心哈哈哈,将就着看,主要就是下面增删改查四个btn 对于s ...
- python2.7入门---操作mysql数据库增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...
随机推荐
- drf之序列化组件(一):Serializer
序列化组件:Serializer.ModelSerializer.ListModelSerializer Serializer 偏底层 ModelSerializer 重点 List ...
- 【初学Java学习笔记】AOP与OOP
AOP(Aspect Oriented Programming) 面向切面编程,是属于Spring框架中的内容.AOP相当于OOP的补充,当我们需要对多个对象引入一个公共行为,比如日志,操作记录等,就 ...
- trollcave解题
这是第一次完整地进行模拟渗透,前前后后一共花了一天时间,花了点时间写了个writeup. 博主是个菜鸡,如果有大神看到,请轻喷...... writeup下载:https://hrbeueducn-m ...
- SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_unicode_ci' is not valid for CHARACTER SET 'binary'
SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_unicode_ci' is not valid ...
- vs code 初始化vue项目框架
1.首先安装npm组件 下载地址:https://nodejs.org/en/ 安装完 2.配置环境变量 3.验证是否成功 node -v npm -v 4.替换npm 输入npm install ...
- Kubernetes实战总结 - Ingress选型与应用
一.概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,可以提供负载均衡.SSL 终结和基于名称的虚拟托管. 典型的访问方式是 HTTP,用于将不同URL的访问请求转发到后端不同的 ...
- 关于SQL SERVER 的日期格式化
--日期格式化Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), G ...
- Java1.7的HashMap源码分析-面试必备技能
HashMap是现在用的最多的map,HashMap的源码可以说是面试必备技能,今天我们试着分析一下jdk1.7下的源码. 先说结论:数组加链表 一.先看整体的数据结构 首先我们注意到数据是存放在一个 ...
- locust接口压测
前言: locust是完全基于python,是一个简单易用的分布式负载测试工具 Locust特性 使用Python编写模拟用户行为的代码,无需繁琐的配置 分布式可扩展,能够支持上百万用户 自带Web界 ...
- BFC原理解析
BFC的概念 块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. 它是 ...