上篇说了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 实现基本增删改查的更多相关文章

  1. abp vnext 开发快速入门 1 认识框架

    最近在做一个项目,用的框架是Abp vnext ,不是Abp, 我自己也是刚开始用这个框架来做项目,难免要查资料,这个框架官方有中文文档,可以到官网www.abp.io 去查看,国内也有一些写了相关的 ...

  2. abp vnext 开发快速入门 4 跨域设置

    由于项目采用的微服务框架,前端与后端交互难免有跨域的问题.abp vnext实现跨域也很简单,只需要设置几处就可以了,这里只讲全局的跨域,至于局部的Action如何跨域请自行搜索.netcore 跨域 ...

  3. abp vnext 开发快速入门 3 实现权限控制

    上篇讲了abp vnext 实现了简单的增加操作的例子.删除更新查询基本类似,这里就不讲了,接下来说下如何实现角色权限控制. 再说之前,先说下如果想更加透彻的理解abp vnext的权限控制,最好是先 ...

  4. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  5. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

  6. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  7. Web API开发实例——对产品Product进行增删改查

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  8. VisualStudio2013内置SQLServer入门(二)--增删改查

    前一篇 http://www.cnblogs.com/qixi233/p/4766451.html 这篇是sqlserver的操作 界面比较走心哈哈哈,将就着看,主要就是下面增删改查四个btn 对于s ...

  9. python2.7入门---操作mysql数据库增删改查

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...

随机推荐

  1. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

  2. GitLab Runner部署(kubernetes环境)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 调用微信内置的方法及wx.config的配置问题

    首先请看网址: https://www.w3cschool.cn/weixinkaifawendang/h8ap1qe5.html 重点说下怎么配置wx.config(为了安全,所有的参数都在服务端获 ...

  4. JS代码简洁之道--函数

    函数的参数越少越好 有一个准则是:如果你的函数参数超过两个,就应该改为对象传入. 这样做是合理的,因为当函数参数超过两个时,参数顺序开始变得难以记忆,而且容易出现一种很尴尬的情况:比如我只需要传入第三 ...

  5. JavaScript基础对象创建模式之私有属性和方法(024)

    JavaScript没有特殊的语法来表示对象的私有属性和方法,默认的情况下,所有的属性和方法都是公有的.如下面用字面声明的对象: var myobj = { myprop: 1, getProp: f ...

  6. Python之浅谈多态和封装

    目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...

  7. navicat连接vagrant中的数据库

  8. 在执行 pip install 时遇到错误:python setup.py egg_info ...

    最近重新安装win10 64位专业版, 正好遇到python3.8发布,试了一下.结果jupyter都安装不了...心碎. ERROR: Command errored out with exit s ...

  9. 华山论剑(没有上司的舞会)——树形dp

    华山论剑(没有上司的舞会) 题目描述 一日,小策如往常一般打开了自己的传奇,刚上线不久,就收到了帮主的私信.原来帮派里要召开一次武功比拼,让他来邀请各帮派人员,因为有些侠客还是萌新,所以需要小策挨个选 ...

  10. HDU 5961 传递 题解

    题目 我们称一个有向图G是 传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c. 我们称图G是一个 竞赛图,当且仅当它是一个有向图且它的 ...