当前位置: 首页 > news >正文

.Net使用EF Core框架如何连接Oracle

目录

一、Nutget包添加

二、 配置文件

三、创建实体类

四、创建数据库上下文类

五、将数据库上下文服务注册到容器

六、测试数据库数据

(1)编写PeopleController

(2)编写People页面


一、Nutget包添加

一定要安装Oracle.MangedDataAccess,他是Oracle的驱动程序。如果是使EntityFrameworkCore框架操作Oracle,则还需要引入Oracle.EntityFrameWorkCore

二、 配置文件

在appsetting.json文件中写好数据的连接信息,这里我本来使用的是Data source=tns别名,但是报错了,后面我也看了tnsnames.ora中的信息,tns别名也没有错。但是一直报错,所以我只能将这个连接信息全部写全了。

{
  "ConnectionStrings": {
    "oracleConnect": "User Id=用户名;Password=用户密码;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=服务名称)))"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

三、创建实体类

因为Oracle默认的话不管是大写还是小写,最后都会转换成大写,所以如果实体类的名字如果和表明不一致的话(大写小写Oracle是有区别的),会报错!

所以使用了[Table]属性来映射对应的表。

包括属性名也是如此,使用了[Column]来映射对应的属性名

using System.ComponentModel.DataAnnotations.Schema;

namespace OracleConnectTest.Models
{
    [Table("PEOPLE")]
    public class People
    {
        //oracle默认全部是大写
        [Column("ID")]
        public int id { get; set; }
        [Column("NAME")]
        public string name { get; set; }
    }
}

四、创建数据库上下文类

创建一个Data文件夹,将该类(数据库上下文类)放入其中(个人习惯!)

using Microsoft.EntityFrameworkCore;
using OracleConnectTest.Models;
using System.ComponentModel.DataAnnotations.Schema;

namespace OracleConnectTest.Data
{
    public class OracleConnectTestContext : DbContext
    {
        public OracleConnectTestContext(DbContextOptions options) : base(options)
        {
        }
      
        public DbSet<People> peoples { get; set; }
    }
}

五、将数据库上下文服务注册到容器

Program.cs

using Microsoft.EntityFrameworkCore;
using OracleConnectTest.Data;

var builder = WebApplication.CreateBuilder(args);

//依赖项注入
builder.Services.AddDbContext<OracleConnectTestContext>(options =>
         options.UseOracle(builder.Configuration.GetConnectionString("oracleConnect")));

六、测试数据库数据

(1)编写PeopleController

using Microsoft.AspNetCore.Mvc;
using OracleConnectTest.Data;

namespace OracleConnectTest.Controllers
{
    public class PeopleController : Controller
    {
        private readonly OracleConnectTestContext _context;

        public PeopleController(OracleConnectTestContext context)
        {
            _context = context;
        }

        public IActionResult Index()
        {
            var s=_context.peoples.ToList();
            return View(s);
        }
    }
}

(2)编写People页面

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
@model List<OracleConnectTest.Models.People>;

@foreach(var item in Model){
    <p>@item.id</p>
    <p>@item.name</p>
    
}

 

相关文章:

  • Django 创建表 choices的妙用:get_<field_name>_display()
  • 2025年智慧城市解决方案下载:AI-超脑中台,体系架构整体设计
  • CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发
  • Office hour 1
  • 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,其各自的优势
  • java八股---java基础03(包、IO流、反射、String、包装类)
  • zola + github page,用 workflows 部署
  • python中的抽象类在项目中的实际应用
  • webassembly009 transformers.js 网页端侧推理 NLLB翻译模型
  • 【Unity】 HTFramework框架(六十)Assistant助手(在Unity中接入DeepSeek等AI语言大模型)
  • 蓝桥杯---N字形变换(leetcode第6题)题解
  • 蓝桥杯备赛 Day13.1走出迷宫
  • 以SpringBoot+Vue分布式架构商城系统为例,讲解订单生命周期的管理
  • 分卷压缩怎么操作?分卷压缩怎么解压?
  • Python----PyQt开发(PyQt高级:手搓一个简单的记事本)
  • 腾讯混元hunyuan3d生成模型,本地搭建和使用
  • singleTaskAndroid的Activity启动模式知识点总结
  • 374_C++_升级等其他类型标签,使用将4字节字符串转换为无符号整数的定义方式
  • Managed Lustre 和 WEKA:高性能文件系统的对比与应用
  • 图像缩放的双线性插值实现方式
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”
  • 英媒:英国首相住所起火,目前无人伤亡
  • 城事 | 重庆新增热门打卡地标,首座熊猫主题轨交站亮相
  • 被流量绑架人生,《人生开门红》能戳破网络时代的幻象吗
  • 署名文章:从宏观调控看中国经济基本面
  • “海豚音”依旧,玛丽亚·凯莉本周来沪开唱