EF Core MySQL Database First:如何用Pomelo包生成Db Context脚手架?
我来帮你搞定用Pomelo EF Core做Database First生成DbContext脚手架的问题,我之前折腾这个的时候也踩过不少坑,给你一步步说清楚:
第一步:先把必要的NuGet包装对
你之前替换包的时候可能漏了关键的设计包,必须确保项目里安装了这三个包:
Pomelo.EntityFrameworkCore.MySql:EF Core适配MySQL的核心包Pomelo.EntityFrameworkCore.MySql.Design:生成脚手架必须的设计时包,这个可不能少!Microsoft.EntityFrameworkCore.Tools:EF Core的工具集,没有它你在程序包管理器控制台根本没法执行Scaffold命令
装包的话直接在PM控制台输命令就行,注意版本要对应——比如你用的是EF Core 6.x,那Pomelo的包也要装6.x版本,EF Core 7.x就对应Pomelo 7.x,跨版本大概率会报错:
Install-Package Pomelo.EntityFrameworkCore.MySql -Version 7.0.0 Install-Package Pomelo.EntityFrameworkCore.MySql.Design -Version 7.0.0 Install-Package Microsoft.EntityFrameworkCore.Tools
第二步:执行正确的脚手架生成命令
包装对之后,就可以用下面的命令生成代码了,我给你写好通用格式,你替换成自己的RDS信息就行:
Scaffold-DbContext "server=你的RDS地址;port=3306;database=你的数据库名;user=RDS用户名;password=RDS密码" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Context MyDbContext -Tables 你的表名
给你解释下几个关键参数:
-OutputDir Models:生成的实体类和DbContext会放到项目下的Models文件夹里,你可以改成自己喜欢的路径-Context MyDbContext:自定义DbContext的类名,比如你想叫AmazonRdsDbContext也行-Tables 你的表名:因为你只有一张表,指定这个参数就只会生成这张表的代码,不用遍历整个数据库
举个实际例子,假设你的RDS地址是my-rds-instance.xxxxxx.us-east-1.rds.amazonaws.com,数据库名是SmallDb,用户名admin,密码MyRdsPass123,表名是Customer,那命令就是:
Scaffold-DbContext "server=my-rds-instance.xxxxxx.us-east-1.rds.amazonaws.com;port=3306;database=SmallDb;user=admin;password=MyRdsPass123" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Context AmazonRdsDbContext -Tables Customer
常见踩坑点提醒
- 连接字符串一定要核对准确,尤其是RDS的地址、端口(默认3306)、密码,还要确保你的机器能访问RDS的安全组端口
- 要是遇到“找不到设计时提供程序”的错误,90%是因为没装
Pomelo.EntityFrameworkCore.MySql.Design包,或者版本和EF Core不匹配 - 之前装过
MySql.Data.EntityFrameworkCore相关的包,一定要彻底卸载干净,避免包冲突
内容的提问来源于stack exchange,提问作者J86
相关产品推荐
相关产品推荐

