vs2022 使用EFcore连接Orcale 数据库优先 (Database-First)
nuget包导入
将以下三个包导入
Oracle.EntityFrameworkCore
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools

此处注意版本一致,我用的是.net 6 所以我使用的ef core 和ef core tools版本均为6.0
程序包管理器控制台运行
在下方的程序包管理器控制台下运行如下代码
Scaffold-DbContext "User ID=JHA;Password=密码;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT =1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))" Oracle.EntityFrameworkCore -OutputDir Models -Force
-OutputDir OraModel 中OraModel 为指定的输出目录,可更改
-Force 表示在执行 Scaffold-DbContext 命令时强制覆盖现有的代码文件,以确保生成的 DbContext 和实体类能够覆盖已存在的文件。如果省略 -Force 参数,命令可能会提示你确认是否要覆盖文件,以避免意外覆盖现有代码。
简而言之,使用 -Force 参数会在执行命令时自动覆盖已存在的文件,而不会提示用户确认。这可以方便在代码生成过程中快速更新已存在的 DbContext 和实体类,一般保留

连接字符串如下实例:
User ID=用户名;Password=密码;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT =1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))
上述的HOST =localhost中localhost为本机 按照实际情况进行更改
至此数据库中表结构及上下文已导出至vs中
我在我的测试库中仅仅添加了两张表 ,即PUB_EMP和STU_INFO,可以看到已经导出至指定目录
测试是否可用
using learnTest.OraModel;
using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main()
{
ModelContext model = new ModelContext();
PubEmp emp = new PubEmp();
var r= from pb in model.PubEmps
select pb;
foreach(var e in r)
Console.WriteLine("名字:"+e.Name+" 年龄:"+e.Age);
//此段为Insert
/* emp.Age = 12;
emp.Name = "TEST";
model.Add(emp);
model.SaveChanges();*/
}
}
控制台输出如下:
至此,确定可正常使用 ,有问题欢迎讨论,1004067303@qq.com
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)