发布于2026-07-23 阅读(0)
扫一扫,手机访问
使用EF Core连接Oracle数据库,整体流程大致分为几个步骤,下面逐一说明。

从Nuget包说起。这里必须安装Oracle.MangedDataAccess,它是Oracle的驱动程序。如果使用EntityFrameworkCore框架操作Oracle,则还需要引入Oracle.EntityFrameWorkCore。
在appsettings.json中配置连接信息。最初尝试使用Data source=tns别名,但报错了。检查了tnsnames.ora,确认别名没问题,但依然报错,所以只能把完整的连接字符串写全。
{
"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默认会将所有标识符转换为大写,因此实体类名和表名如果不一致(大小写敏感),就会报错。解决办法是用[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 peoples { get; set; }
}
}
在Program.cs中注册服务,依赖注入的写法如下:
using Microsoft.EntityFrameworkCore; using OracleConnectTest.Data; var builder = WebApplication.CreateBuilder(args); //依赖项注入 builder.Services.AddDbContext(options => options.UseOracle(builder.Configuration.GetConnectionString("oracleConnect")));
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);
}
}
}
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{}
@model List;
@foreach(var item in Model)
{
@item.id
@item.name
}

售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8