46 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
| 优化背景:
 | ||
|     1、之前我们的从数据库自动生成实体对照模型,依赖于T4模板,同时T4模板里面的针对对应数据库获取信息的方法是自己写的,其实没必要,官方有反向生成工具,也是用的T4模板,现在可以自定义了
 | ||
|     2、如果我们想用pgsql  orcal  mysql,按照之前的方法就要针对这些数据库进行适配,太麻烦
 | ||
|     3、本身不同数据库官方提供了不同反向工程的库,利用命令行就可以根据数据库的定义生成实体
 | ||
|        Microsoft.EntityFrameworkCore.SqlServer   mssql 
 | ||
|        Npgsql.EntityFrameworkCore.PostgreSQL    pgsql
 | ||
|        Pomelo.EntityFrameworkCore.MySql         mysql
 | ||
|        Oracle.EntityFrameworkCore               Oracle
 | ||
|     4、微软官方针对这些不同的库,生成实体的T4模板是一样的,而且也提供了自定义模板的功能,我们可以在官方模板的基础上进行自定义,以适配属于我们项目的实体生成
 | ||
|         1)继承我们自己的审计基类
 | ||
|         2)生成的时候过滤Id 以及我们自己的审计字段
 | ||
|         3)为适配多种数据库,自定义指定字符串长度(默认长度不用标注,特殊长度才标注)
 | ||
|         4)为适配多种数据库,自定义精度特性,统一处理
 | ||
| 
 | ||
| 程序包管理控制台命令行工具使用:
 | ||
| 
 | ||
| 参数说明:
 | ||
| -o  模型输出目录
 | ||
| -c  指定数据库上下文名字
 | ||
| -d  使用数据注解  不指定,默认是fluentAPI
 | ||
| -t  指定要生成的表名
 | ||
| -p  指定项目名字 (包含上下文,并且产生迁移文件的项目)
 | ||
| 
 | ||
| 备注: 因为是从数据库反向生成实体,所以会默认生成dbcontext ,每次生成想要的实体后,删除指定的名称context即可
 | ||
|        针对字符串类型,我们避免string字段 数据库存储null  string? 数据库才存储null(除非有合理的理由),这样可以避免代码里面用string 变量,总是要判断是否为null
 | ||
|        同时在保存数据库实体的时候,在赋值审计字段的时候,针对string 类型的变量,如果当前值是null,设置为""字符串,也可以避免实体定义的每个string 变量赋值默认值,有时候会忘记
 | ||
| 
 | ||
| Scaffold-DbContext "连接字符串" 数据库提供程序包 -Project 项目名称 -OutputDir 输出目录 -Context "生成的上下文名称" -DataAnnotations  -Tables 表1, 表2 
 | ||
| 
 | ||
| 方式1:
 | ||
| Scaffold-DbContext "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -Project IRaCIS.Core.Test -OutputDir GenerateContextModelFolder -Context "TempContext" -DataAnnotations  -Tables Dictionary, Site 
 | ||
| 
 | ||
| 方式2: 多个表 -t  Subject -t SubjectVisit
 | ||
| dotnet ef dbcontext scaffold "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -p IRaCIS.Core.Test  -d  -o GenerateContextModelFolder -c "TempContext" -t Dictionary  -t Site
 | ||
| 
 | ||
| 
 | ||
| 开发者PowerShell || 程序包管理控制台命令行  使用:
 | ||
| 通过Liquid模板生成基础视图模型、服务接口、服务实现基本方法(必须先有数据库实体模型,否则视图模型无法生成)
 | ||
|  dotnet run --project IRaCIS.Core.Test -- Dictionary Site
 | ||
| 
 | ||
| 
 | ||
| 自动脚本方便执行两句脚本:
 | ||
| 
 | ||
| ./IRaCIS.Core.Test/AutoTemplatel.ps1 -Tables Dictionary, Site  
 | ||
| 
 | ||
| 如果不能执行ps1脚本,管理员设置:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned |