关于Oracle数据库 EF 报 ORA-01918: 用户 'dbo' 不存在 错误解决
在使用C# EF 连接Oracle 数据库时,有时会报“ORA-01918: 用户 'dbo' 不存在 错误解决”,网上查了很多,大多都解释不清楚,这里亲自试了一下,并总结如下:
原因:
之所以会报这种错误,是因为oracle 默认方位用户指定为 dbo,在Sql Server 中这个dbo 是我们熟悉的系统默认对象,但在oracle 中一般不会有这个schema,即用户,所以会报错
解决方法
1.创建dbo用户
create user dbo identifeid by 123; //创建用户 dbo 密码 123
grant connect,resource to dbo; //授权
alter user dbo account unlock; //解锁
2.修改默认用户
protected ovveride void OnModelCreating(DbModelBuilder modelBuilder){
modelBuilder.HasDefaultSchem("T1"); //注意,这里一定要大写,因为C#是区分大小写的,oracle 中默认是大写,虽然oracle 不区分大小写,但是c#会因为大小写问题找不到用户
base.OnModelCreating(modelBuilder);
}
示例:
//数据上下文
using Oracle.ManagedDataAccess.EntityFramework;
using System.Data.Entity;
using ConsoleEF.Model;
namespace ConsoleEF.Infrastructure
{
public class PatientDbContext:DbContext
{
public PatientDbContext() : base("name=connStr") { }
public DbSet<Patient> Patients { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("T1");
base.OnModelCreating(modelBuilder);
}
}
}
//模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleEF.Model
{
[Table("PATIENTS")] //这里使用大写标注表名,是因为Oracle 默认生成表名为大写,如果不指定,则会生成带有双引号"Patients" 的表名,字段名也是一样.
public class Patient
{
[Key]
[Column("ID")]
public int ID { get; set; }
[Column("NAME")]
[StringLength(30)]
public string NAME { get; set; }
[Column("ZHEND")]
[StringLength(50)]
public string ZHEND { get; set; }
}
}
//测试
using ConsoleEF.Infrastructure;
using System;
using System.Linq;
namespace ConsoleEF
{
class Program
{
private static PatientDbContext pdb;
static void Main(string[] args)
{
try
{
pdb = new PatientDbContext();
Console.WriteLine(pdb.Patients.Count());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
//配置文件 省略部分
<connectionStrings>
<add name="connStr" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=t1;Password=tt123;Data Source=localhost:1521/orcl" />
</connectionStrings>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!