.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>
}