飞雪高 發表於 2025-2-12 10:57:35

.Net使用EF Core框架连接Oracle的方法

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、Nutget包添加</a></li><li><a href="#_label1">二、 配置文件</a></li><li><a href="#_label2">三、创建实体类</a></li><li><a href="#_label3">四、创建数据库上下文类</a></li><li><a href="#_label4">五、将数据库上下文服务注册到容器</a></li><li><a href="#_label5">六、测试数据库数据</a></li><ul class="second_class_ul"><li><a href="#_lab2_5_0">(1)编写PeopleController</a></li><li><a href="#_lab2_5_1">(2)编写People页面</a></li></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、Nutget包添加</h2>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202502/2025021210540033.png" /></p>
<blockquote><p>一定要安装Oracle.MangedDataAccess,他是Oracle的驱动程序。如果是使EntityFrameworkCore框架操作Oracle,则还需要引入Oracle.EntityFrameWorkCore</p></blockquote>
<p class="maodian"><a name="_label1"></a></p><h2>二、 配置文件</h2>
<blockquote><p>在appsetting.json文件中写好数据的连接信息,这里我本来使用的是Data source=tns别名,但是报错了,后面我也看了tnsnames.ora中的信息,tns别名也没有错。但是一直报错,所以我只能将这个连接信息全部写全了。</p></blockquote>
<div class="jb51code"><pre class="brush:json;">{
"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": "*"
}</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>三、创建实体类</h2>
<blockquote><p>因为Oracle默认的话不管是大写还是小写,最后都会转换成大写,所以如果实体类的名字如果和表明不一致的话(大写小写Oracle是有区别的),会报错!</p>
<p>所以使用了属性来映射对应的表。</p>
<p>包括属性名也是如此,使用了来映射对应的属性名</p></blockquote>
<div class="jb51code"><pre class="brush:csharp;">using System.ComponentModel.DataAnnotations.Schema;
namespace OracleConnectTest.Models
{
   
    public class People
    {
      //oracle默认全部是大写
      
      public int id { get; set; }
      
      public string name { get; set; }
    }
}</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>四、创建数据库上下文类</h2>
<blockquote><p>创建一个Data文件夹,将该类(数据库上下文类)放入其中(个人习惯!)</p></blockquote>
<div class="jb51code"><pre class="brush:csharp;">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&lt;People&gt; peoples { get; set; }
    }
}</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>五、将数据库上下文服务注册到容器</h2>
<blockquote><p>Program.cs</p></blockquote>
<div class="jb51code"><pre class="brush:csharp;">using Microsoft.EntityFrameworkCore;
using OracleConnectTest.Data;
var builder = WebApplication.CreateBuilder(args);
//依赖项注入
builder.Services.AddDbContext&lt;OracleConnectTestContext&gt;(options =&gt;
         options.UseOracle(builder.Configuration.GetConnectionString("oracleConnect")));</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>六、测试数据库数据</h2>
<p class="maodian"><a name="_lab2_5_0"></a></p><h3>(1)编写PeopleController</h3>
<div class="jb51code"><pre class="brush:csharp;">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);
      }
    }
}</pre></div>
<p class="maodian"><a name="_lab2_5_1"></a></p><h3>(2)编写People页面</h3>
<div class="jb51code"><pre class="brush:csharp;">@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
@model List&lt;OracleConnectTest.Models.People&gt;;
@foreach(var item in Model){
    &lt;p&gt;@item.id&lt;/p&gt;
    &lt;p&gt;@item.name&lt;/p&gt;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202502/2025021210540034.png" /></p>
頁: [1]
查看完整版本: .Net使用EF Core框架连接Oracle的方法