OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
OsharpNS轻量级.net core快速开发框架简明入门教程
教程目录
-
从零开始启动Osharp
1.1. 使用OsharpNS项目模板创建项目
1.2. 配置数据库连接串并启动项目
1.3. OsharpNS.Swagger使用实例(登录和授权)
1.4. Angular6的前端项目启动
-
Osharp代码生成器的使用
2.1 生成器的使用
-
Osharp部分模块使用
3.1 Osharp.Redis使用
-
Osharp深度学习和使用
4.2 多上下文配置(多个数据库的使用)
4.3. 自定义模块的定义(Senparc.Weixin的使用)
4.4. 继续学习中....
OsharpNS官方资源
项目地址:https://github.com/i66soft/osharp-ns20
演示地址:https://www.osharp.org 直接使用QQ登录可以查看效果
文档地址:https://docs.osharp.org 正在完善中....
发布博客:https://www.cnblogs.com/guomingfeng/p/osharpns-publish.html 大神看这个文档应该就能跑起来,从零开始启动Osharp基于此文档完成
VS生成器插件:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp
官方交流QQ群:85895249
Osharp代码生成器的使用
目录
下载并安装生成器插件
-
生成器在线下载地址:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp
-
也可以通过VS2017菜单栏
工具-扩展和更新
,检索Osharp
进行插件的安装
配置项目字段信息
- 通过菜单运行Osharp代码生成器,启动之后直接全屏
-
生成器使用流程
从生成器界面上可以看到,生成器包括
项目信息
、项目模块列表
、模块实体列表
、外键配置
、实体属性列表
配置流程:
-
配置项目信息:对项目整体信息进行配置
特别注意:在配置项目信息时,注意对
命名空间前缀
的配置,以下图解决方案为例,命名空间前缀就应该填写CanDoo.Test
,否则生成的时候会提示识别Osharp项目失败,影响生成 -
配置项目模块:一个系统往往有多个模块组成,本示例中配置两个模块
代码名称:生成后对应模块的命名空间和文件夹
显示名称:模块的中文含义,会体现在功能模块的名字上
-
配置模块实体:通过点击对应的项目模块进入模块的实体配置
代码名称:实体名称
显示名称:实体的中文名字
主键类型:表的主键类型,一般是int吧,根据实际选择
增:控制此实体是否生成新增的API,接口,实现
改:控制此实体是否生成编辑的API,接口,实现
删:控制此实体是否生成删除的API,接口,实现
数据权限:没折腾,不知道怎么用
锁定:生成IsLocked字段,具体的实现得自己实现
软删除:生成DeletedTime字段,用于标识删除时间
创建时间:生成创建时间
创建审计:生成创建时间,创建人Id字段 (包含前面的创建时间)
更新审计:生成更新时间,更新人Id字段
外键 按钮:点击进入外键配置
-
配置实体属性:
代码名称:实体的属性
显示名称:实体的注释
属性类型全名:实体的数据类型,特别注意:如果是实体集合,直接使用ICollection<>即可,如果是关联特定实体,比如关联User,需要填写User
只读:这个应该是生成界面时使用的属性
排序:这个应该是生成界面时使用的属性
编辑:这个应该是生成界面时使用的属性
过滤:这个应该是生成界面时使用的属性
必填:生成实体的时候会增加[IsRequired]属性
最小长度:这个应该是生成界面时使用的属性
最大长度:这个应该是生成界面时使用的属性
最小值:这个应该是生成界面时使用的属性
最大值:这个应该是生成界面时使用的属性
可空类型:对应int?,勾选了,数据类型会加"?"
外键:勾选了,说明当前属性是某个实体的外键
导航:勾选了,说明当前属性是某个实体的导航属性
关联实体:选择当前字段关联的实体,同一套“外键+导航”要选择相同的关联实体
输入DTO:勾选了,此属性会在实体的InputDto中生成对应属性
输出DTO:勾选了,此属性会在实体的OutputDto中生成对应属性
默认值:控制默认值
-
配置外键:
己方导航属性:配置实体属性时,勾选了
导航
的属性会在这里显示供选择己方外键属性:配置实体属性时,勾选了
外键
的属性会在这里显示供选择对方实体: 根据实际选择就行
对方导航属性:这里的具体设置看实例吧
外键关系:有一对多 多对一等选项 一般就用多对一和一对一就行,在外键配置部分详细说明
必须:是否必须的
删除行为:有多个选项,根据实际选择,建议使用Restrict
-
保存配置:配置过程中,顺手就去点一下,免得插件崩溃导致你奔溃
-
生成代码:所有配置完成后,点一下保存配置,然后再生成代码
-
多对一关系的配置
在本教程中,我们使用文章分类文章作者这3者来说明多对一关系的配置
从文章的角度出发,文章和文章分类是多对一,文章和用户也是多对一,文章分类和文章是双方都有对方的导航,文章和用户的导航只存在于文章中
文章分类:包含文章集合的导航
文章:包含文章分类和用户的导航
用户:不包含文章的导航
-
配置文章分类实体属性
配置
Articles
属性,属性类型全名为ICollection<>
,因为这个是导航属性,所以勾选导航
,关联实体中配置为关联的实体CanDoo.Test.CMS.Entities.Article
-
配置文章实体属性
配置文章分类关联:
配置
ArticleCategoryId
属性,属性类型全名为System.Int32
,因为这个是外键,所以勾选外键
,关联实体中配置为关联的实体CanDoo.Test.CMS.Entities.ArticleCategory
;配置
ArticleCategory
属性,属性类型全名为ArticleCategory
,因为这个是导航属性,所以勾选导航
,关联实体中配置为关联的实体CanDoo.Test.CMS.Entities.ArticleCategory
配置用户关联:
配置
UserId
属性,属性类型全名为System.Int32
,因为这个是外键,所以勾选外键
,关联实体中配置为关联的实体CanDoo.Test.Identity.Entities.User
;配置
User
属性,属性类型全名为User
,因为这个是导航属性,所以勾选导航
,关联实体中配置为关联的实体CanDoo.Test.Identity.Entities.User
-
配置外键
配置文章和文章分类的外键:己方导航属性
AritcleCategory
,己方外键属性AritcleCategoryId
,对方实体CanDoo.Test.CMS.Entities.ArticleCategory
,对方导航属性Articles
,外键关系ManyToOne
,必须就根据实际需要填写了,删除关系选择Restrict
,配置此属性,分类下如果存在文章,删除时会因为关联禁止删除配置文章和用户的外键:己方导航属性
User
,己方外键属性UserId
,对方实体CanDoo.Test.Identity.Entities.User
,对方导航属性不要填写,这里能和填写的做一下对比,外键关系ManyToOne
,必须就根据实际需要填写了,删除关系选择Restrict
,配置此属性,分类下如果存在文章,删除时会因为关联禁止删除
代码生成并查看效果
-
当配置完成之后,点一下“保存配置”
-
点一下“生成代码”按钮,系统会询问是否为Osharp解决方案,点"是"就行了
-
代码生成之后,已经将代码添加到项目中,可以执行编译,如果有错,主要就是配置问题或者是有些类库没有引用,我在生成之后发现User实体对应的类库没有引用,引用之后能正常编译(当然前端中也有代码生成,因为我不用这个前端,所以就没仔细去研究了)
-
在
程序包管理控制台
中运行add-migration -Context DefaultDbcontext initCMS
,生成数据库迁移代码(如果没有多上下文,执行add-migration initCMS
即可) -
在
程序包管理控制台
中运行update-database -Context DefaultDbcontext
,执行数据库迁移(如果没有多上下文,执行update-database
即可) -
运行项目,查看Swagger,会发现对应的5张表所有的增删改查API都已经生成,并能正常使用