.NET中Scaffold-DbContext遇密码末尾单引号报错求助
解决Pomelo.EntityFrameworkCore.MySql连接字符串密码含末尾单引号的问题
有效转义方案
针对密码末尾带单引号的场景,直接用**双单引号''**替换密码里的单个单引号即可,不需要给密码值额外加引号包裹。修改后的Package Manager控制台命令如下:
PM> Scaffold-DbContext "server=remoteServe, port=3306; User Id=Myuser; database=database; Password=1234''" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -ContextDir Context
原理:在.NET的连接字符串解析规则中,当整个连接字符串用双引号包裹时,内部的两个单引号会被解析为一个实际的单引号,刚好匹配你的密码格式。
备选方案:使用MySQL URL格式连接字符串
如果上述方式仍有问题,可以切换为URL风格的连接字符串,此时单引号可直接保留(或用URL编码%27替换):
# 直接保留单引号 PM> Scaffold-DbContext "mysql://Myuser:1234'@remoteServe:3306/database" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -ContextDir Context # 或用URL编码替换单引号 PM> Scaffold-DbContext "mysql://Myuser:1234%27@remoteServe:3306/database" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -ContextDir Context
为什么之前的尝试无效?
你之前给password的值额外添加双引号/单引号的写法(比如password="****'")不符合.NET连接字符串的键值对规则,连接字符串的键值对直接是Key=Value格式,Value不需要额外嵌套引号,多余的引号会被当作连接字符串的一部分,导致解析报错。
内容的提问来源于stack exchange,提问作者niltongc
相关产品推荐
相关产品推荐

