快捷搜索: 王者荣耀 脱发

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方法跨平台支持良好

经验分享 程序员 微信小程序 职场和发展