Orcale建立插拔式PDB数据库
确认CDB环境
win下用win+R执行 sqlplus / as sysdba 进行本地登陆orcale
bash
-- 以sysdba身份登录
sqlplus / as sysdba
-- 查看当前容器
SHOW CON_NAME;
-- 查看PDB状态
SELECT name, open_mode FROM v$pdbs;
-- 创建PDB数据文件目录(如果不存在)
-- 在操作系统命令行执行,win手动创建
mkdir D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb
-- 执行创建语句
-- 确保在CDB$ROOT容器中
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- 执行创建PDB语句
-- 以根PDB为模板(pdbseed)
CREATE PLUGGABLE DATABASE mespdb
ADMIN USER mes IDENTIFIED BY "123456"
DEFAULT TABLESPACE mes_ts
DATAFILE 'D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb\mespdb01.dbf'
SIZE 500M AUTOEXTEND ON
FILE_NAME_CONVERT = (
'D:\softs\orcaleDataBase23aiFree\oradata\FREE\pdbseed',
'D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb'
)
PATH_PREFIX = 'D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb'
STORAGE (MAXSIZE 10G);
-- STORAGE (MAXSIZE UNLIMITED) -- 如果不限制存储空间
-- 查看PDB是否创建成功
SELECT name, open_mode FROM v$pdbs WHERE name = 'MESPDB';
-- 切换到PDB并打开
-- 切换到新创建的PDB
ALTER SESSION SET CONTAINER = mespdb;
-- 打开PDB
ALTER PLUGGABLE DATABASE mespdb OPEN;
-- 或者从CDB$ROOT打开
ALTER PLUGGABLE DATABASE mespdb OPEN READ WRITE;
-- 查看PDB的服务名,应该是把这个作为数据库名字
SELECT name, pdb FROM v$services WHERE pdb = 'MESPDB';
-- 使用新创建的用户登录PDB
sqlplus mes/123456@localhost:1521/mespdb
-- 验证表空间
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE tablespace_name = 'MES_TS';
-- 设置PDB自动启动 在CDB$ROOT中执行(sqlplus / as sysdba)
ALTER PLUGGABLE DATABASE mespdb SAVE STATE;
sql
CREATE PLUGGABLE DATABASE mespdb
ADMIN USER mes IDENTIFIED BY "123456"
DEFAULT TABLESPACE mes_ts
DATAFILE 'D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb\mespdb01.dbf' SIZE 500M AUTOEXTEND ON
FILE_NAME_CONVERT = ('D:\softs\orcaleDataBase23aiFree\oradata\FREE\pdbseed',
'D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb')
PATH_PREFIX = 'D:\softs\orcaleDataBase23aiFree\oradata\FREE\mespdb'
STORAGE (MAXSIZE 10G);
环境
需要在NuGet中下载
Oracle.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
生成实体例子
下面是一个在dotNet 8.0 下的例子
一个webapi程序和一个类库
目标是将Orcale数据库的表生成实体到AspNetOrcaleSamples.Data下
对两个程序集都下载上述的依赖包

下载依赖包后,在打开 NuGet程序包控制器控制台
执行下面的命令即可生成实体和Context
bash
Scaffold-DbContext "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=mespdb)));User Id=mes;Password=123456" Oracle.EntityFrameworkCore -OutputDir Entities -ContextDir Data -Project AspNetOrcaleSamples.Data -StartupProject AspNetOrcaleSamples -Force
命令详解:
连接字符串:
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=mespdb)));User Id=mes;Password=123456"
这是 Oracle 数据库的连接字符串,指定了主机、端口、服务名和凭据。
提供程序:Oracle.EntityFrameworkCore
使用 Oracle 的 EF Core 提供程序。
参数说明:
-OutputDir Entities:将实体类输出到项目中的 Entities 文件夹。
-ContextDir Data:将 DbContext 类输出到项目中的 Data 文件夹。
-Project AspNetOrcaleSamples.Data:指定目标项目,即实体类和 DbContext 将生成在哪个项目中。
-StartupProject AspNetOrcaleSamples:指定启动项目,通常是 Web 项目,用于读取配置和设计时服务。
-Force:强制覆盖已存在的文件。

生成完成

Asp.Net Core集成EFCore
在WebApi入口Program.cs中
csharp
// 注册 DbContext
// 可以注释掉ModelContext中的OnModelCreating方法,使用下面的代码
builder.Services.AddDbContext<ModelContext>(options =>
options.UseOracle(
builder.Configuration.GetConnectionString("OracleConnection")
//,oracleOptions => oracleOptions.UseOracleSQLCompatibility("21")
));
然后使用构造函数注入即可使用DBContext
