EFCore DbFirst生成代码的两种方式
Entity Framework 6.0以后的版本可用性比较好。EFCore还兼具了跨平台的特性,简要介绍一下可用的三种实现方式:
一、GenMs
此方法使用于Windows平台,Mac平台生成文件时路径有问题
1、安装GenMs/GenPg/GenMy
在终端/命令提示符里输入:
dotnet tool install genmy -g # 根据mysql库生成 dotnet tool install genms -g # 根据sqlserver库生成 dotnet tool install genpg -g # 根据postgresql库生成
2、工具参数说明
-U SQLServer账号 -P SQLServer密码 -D 需要生成的数据库
-N 字符串,生成代码的解决方案名和命名空间 -S 生成解决方案,在项目第一次生成时使用 -A 生成后台管理 -R 下载资源 -O 输出路径(默认:当前目录)
3、创建工程生成代码
genms 127.0.0.1 -U sa -P password -D MyDataBase -N MyEFProject -S -A -R
4、特殊说明
本人使用Mac系统试用了该命令,生成过程中报错,但也生成了文件,生成的文件名中包含了:“src..xxxx”等字样的内容,把目录结构内容也输出到了文件名中。
Windows系统直接使用上述命令可以生成。
Linux未做测试。
二、Scaffold-DbContext / dotnet ef dbcontext scaffold方式
Scaffold-DbContext命令在Core2.0后合至CLI工具中,即dotnet ef dbcontext scaffold
1、安装ef
dotnet install tool -g dotnet-ef
执行上述命令后,即可执行dotnet ef相关命令
2、dotnet ef dbcontext scaffold命令相关参数说明
dotnet ef dbcontext scaffold [arguments] [options]
必要参数:
<CONNECTION> 连接到DB的连接串
<PROVIDER> 使用的Provider (例如:Microsoft.EntityFrameworkCore.SqlServer)
可选配置:
-d|--data-annotations 使用特性(Attribute)来配置模板(如果可行). 如果省略,则只使用fluent API
-c|--context <NAME> 指定DbContext的名称
--context-dir <PATH> 要放入DbContext文件的目录。路径是相对于项目目录的
-f|--force 覆盖已存在的文件
-o|--output-dir <PATH> 存放文件的目录。路径是相对于项目目录的
--schema <SCHEMA_NAME>... 要为其生成实体类型的表的架构
-t|--table <TABLE_NAME>... 要为其生成实体类型的表
--use-database-names 直接使用数据库中表名和列名
--json 显示Json输出
-p|--project <PROJECT> 指定使用的工程
-s|--startup-project <PROJECT> 要使用的启动项
--framework <FRAMEWORK> 目标Framework
--configuration <CONFIGURATION> 要使用的配置
--runtime <RUNTIME_IDENTIFIER> 要使用的RunTime
--msbuildprojectextensionspath <PATH> MSBuild项目扩展路径。默认为“obj”
--no-build 不要构建项目(仅当生成是最新的时才使用此选项)
-h|--help 显示帮助信息
-v|--verbose 显示详细输出
--no-color 不给输出着色
--prefix-output 带级别的输出前缀
3、生成代码
命令行进入EfModel工程的目录
仅使用必要参数,输入如下命令并修改必要参数:
dotnet ef dbcontext scaffold "user id=YOUR_USERNAME;password=YOUR_PWD;initial catalog=Temp;data source=YOURID_OR_MACHINENAME" Microsoft.EntityFrameworkCore.SqlServer
在当前工程的根目录下生成了对应的DbContext.cs文件与各个Model.cs文件
4、特殊说明
如需使用Scaffold-DbContext命令,需要使用VS的Nuget控制台。 Scaffold-DbContext命令在Core2.0后合至CLI工具中,即dotnet ef dbcontext scaffold
dotnet ef dbcontext scaffold方法跨平台支持良好