使用EFcore连接Oracle数据时出现的错误及解决方案(Oracle版本指定错误)
程序环境
1,DotNet版本 .net 6.0
2,EFcore版本:
- Microsoft.EntityFrameWorkCore
6.0.11
- Microsoft.EntityFrameWorkCore.Tools
6.0.11
- Microsoft.EntityFrameWorkCore.Design
6.0.11
- Microsoft.EntityFrameWorkCore.Relational
6.0.11
- Microsoft.EntityFrameWorkCore.SqlServer
6.0.11
- Oracle.EntityFrameWorkCore
6.21.61
代码内容
var result =await _db.xxxx.AsNoTracking().FirstOrDefaultAsync(m => m.USERNO == userNo);
报错内容
ORA-00933:SQL命令未正确结束
故障原因
经过搜索发现可能因为与oracle数据库版本有关,经过查询发现Oracle版本是11g,而EFcore内指定的版本为 12g,因此导致First
、FirstAsync
、FirstOrDefault
、FirstOrDefaultAsync
无法使用。
解决方案
//在dbcontext中使用UseOracleSQLCompatibility("11")指定oracle版本 原先为12
dbContextOptionsBuilder.UseOracle("User Id=user;Password=user;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))", b => b.UseOracleSQLCompatibility("11"));
标签:11,版本,错误,EntityFrameWorkCore,EFcore,6.0,Oracle,Microsoft
From: https://www.cnblogs.com/hy999/p/ef6-oracle-versionerror.html