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 ...
随机推荐
- Java 根据地图定位坐标推荐附近的目标地址(直线距离)
这两天需要在公众号上面做一个关于根据地图当前定位与目标地址直线距离远近推荐的查询,一开始摸不着头脑,现已解决,mark一下 现有的材料:当前用户手机端的通过微信定位的经纬度坐标.数据表中保存有场地的定 ...
- ODBC 常见数据源配置整理
目录 1. 简介 1.1 ODBC和JDBC 1.2 ODBC配置工具 1.3 ODBC 数据源连接配置 2. MySQL 数据源配置 2.1 配置步骤 2.2 链接参数配置 3. SQLServer ...
- 虹软人脸识别——官方 Qt Demo 移植到 Linux
一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...
- RabbitMQ:五、高阶
存储机制 持久化的消息和非持久化的消息都可以被写入到磁盘. 持久化的消息一开始就会写入磁盘,如果可以,也会在内存中保存一部分以提高性能,当内存吃紧时会从内存中清楚. 非持久化的消息一般存储在内存中,内 ...
- 搞定ReentrantReadWriteLock 几道小小数学题就够了
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...
- Linux 查看日志的时候常用命令总结
Linux ~ 查看日志的常用命令总结 1.tail -n <行数>,显示文件的尾部n行内容. -f 循环读取,常用于查阅正在改变的日志文件. ① tail -f test.log ...
- Nginx深入学习(一篇搞定)
我们的口号是:人生不设限! 一.nginx简介 1.什么是nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发 ...
- Javascript中的"函数是第一类对象(first-class object)"
本身这句话很好解释,函数有两个主要特点,援引自 陈新 译的<JavaScript模式>: 1.函数是第一类对象: 函数可以在运行时动态创建,还可以在程序执行过程中创建. 函数可以分配变量, ...
- Angular2-------Error: Unexpected value ‘undefined’ declared by the module ‘模块名
请检查[app.module.ts]文件中的[declarations]模块最后是否多了一个逗号 (完)
- SpringCloud 断路器之Hystrix
Hystrix-断路器 在分布式环境中,许多服务依赖项中的一些必然会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互.Hystrix通过隔离服务之间的访问点 ...