一、简要说明
本篇文章开始进行业务模块的开发模拟,借助user模块来进行业务开发,主要是用户相关的基础操作。主要是先使用Users来体验整个开发的流程。主要是先把一个基础流程跑顺利,在这里我并不会过于追求让所有属性都只能通过方法进去赋值这种写法,我觉得绝大部分项目并没有必要写到这样。虽然借助代码生成器,这种方法也很简单的生成出来。只是我觉得没必要,只是个人喜好。。
源代码地址:https://github.com/lcjyslqyy/AbpVnextLearn
二、具体步骤
2.1.首先创建相应的Entity,
并将Entity放入Dbcontext中绑定Dbset
2.2.初始化Migrations并更新到数据库中去。
如上图,则需要在Migration层安装Microsoft.EntityFrameworkCore.Tools
再运行Update-database更新到数据库。
这样就相当于创建好了相应的表了。
2.3创建对应的AppService,IAppService,Repository,IRepository层。
2.4在相应的层添加好代码:我这里模拟了getuserinfo返回user_name,user_phone方法。一个是完全穿透到ef的repository层的,另一个是利用appservice层的repository的基础方法GetAsyn的。
首先要创建好两个dto,一个用于入参,一个用于出参。暂时我不使用automapper之类的组件进行自动转换,后期会介绍automapper的用法。
然后在HttpApi项目创建UserController:LearnController,后期会在LearnController里面封装一些基础方法,因为除了特殊的接口外,所有的接口尽量都要继承LearnController,然后注入IUserAppServices
(1)穿透到EF的repository层的代码如下,供给get接口使用: UserRepository
IUserRepository
UserAppServices
IUserAppServices
(2)利用Repository的Base方法如下,供给get1接口使用:
UserAppServices
IUserAppServices
2.5调试项目。
使用我们事先录入的userid去调用get/get1接口,看到返回是预期的数据
然后我们看一下控制台输出的日志,查询也是正常的。
对于新人来说可能有两点需要注意一下:
(1)我们使用的是SingleOrDefaultAsync,但是数据查询的是Limit 2,这是因为SingleOrDefaultAsync在返回数据超出1的时候会抛出异常,数据行数为0则输出null,所以需要至少2才能判断是否是>1;
(2)另外还有个注意的点是:控制台假死状态,由于我们有时候看日志的时候会复制里面的内容,然后直接在vs里面退出了调试状态 。如下图:
然后进行修改代码,改完之后再点击调试,这个时候发现项目很久都没有启动,这个时候要随便输入一下就可以,有点类似我们写控制台的时候的ReadKey()