.NET Core 6 Oracle数据库优先Scaffold遇ORA-12154错误求解
解决ORA-12154: TNS无法解析连接标识的问题
错误原因
你执行Scaffold命令时使用的连接字符串指定了Data Source=MB3,但本地Oracle客户端未配置对应的TNS别名,导致无法解析该连接标识。而你在appsettings.json中使用的是完整TNS描述字符串,因此应用本身的连接逻辑正常,但Scaffold命令因未配置的别名触发了错误。
解决方法
方法1:在Scaffold命令中使用完整TNS描述字符串
直接复用appsettings.json中的完整连接字符串,摆脱对本地TNS配置的依赖:
Scaffold-DbContext "User Id=msdb;Password=1234;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.8.187)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MB3)))" Oracle.EntityFrameworkCore -OutputDir Model -Tables customer,student
方法2:配置本地TNS别名
若希望继续使用Data Source=MB3的简化写法,需在本地配置TNS别名:
- 找到Oracle客户端安装目录下的
tnsnames.ora文件,通常路径为Oracle安装路径\network\admin\tnsnames.ora - 在文件中添加以下配置节点:
MB3 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.100.8.187)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MB3) ) )
- 保存文件后,重新执行你原来的Scaffold命令即可。
额外注意事项
- 确保
Oracle.EntityFrameworkCore版本与Oracle 11g兼容,建议使用3.x或5.x版本,较新版本可能不再支持Oracle 11g - 执行Scaffold命令时,确认Visual Studio包管理器控制台的"默认项目"已选中你的ASP.NET Core项目
内容的提问来源于stack exchange,提问作者n.e
相关产品推荐
相关产品推荐

