上篇说了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. disruptor架构一

    Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现. 在使用之前,首先说明disruptor主要功能加 ...

  2. Excel帮助类

    Excel帮助类操作 public class ExcelHelper { /// <summary> /// 将xls导入List /// </summary> /// &l ...

  3. 【UVA11383】 Golden Tiger Claw 【二分图KM算法(板子)】

    题目 题目传送门:https://www.luogu.com.cn/problem/UVA11383 分析 最近刚刚学了二分图,然后来了一个这样的题,看完题意之后,稍微想一想就能想出来是一个二分图,然 ...

  4. Glusterfs读写性能测试与分析

    一.测试目的: 1.测试分布卷(Distributed).分布式复制卷(Distributed-Replicate).条带卷(Strip)和分布式条带复制卷(Distributed-Strip-Rep ...

  5. Linux distributions 发布网站

    Red Hat: http://www.redhat.com SuSE: https://www.suse.com Fedora: https://getfedora.org/ CentOS: htt ...

  6. a标签绑定点击事件失败

    如图 然后对a标签绑定点击事件  无效 换成span标签可以

  7. 二、web自动化快速使用

      1.启动浏览器 from selenium import webdriver # 启动谷歌浏览器,依赖:先安装好chromedriver.exe驱动 # 方式1.当chrome.driver放在p ...

  8. redis zset底层实现原理

    一.Zset编码的选择 1.有序集合对象的编码可以是ziplist或者skiplist.同时满足以下条件时使用ziplist编码: 元素数量小于128个 所有member的长度都小于64字节 其他: ...

  9. 调整数组顺序使奇数位于偶数前面(剑指offer-13)

    方法1:新建两个数组,一个数组用来放奇数,一个数组用来放偶数,最后再把它们合并起来. 1 import java.util.*; 2 public class Solution { 3 public ...

  10. 新手用Python运行selenium的常见问题

    1.更换Python版本 打开pycharm,点击 file——setting——project项目名——project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...