Asp.net core 2.踩坑記錄(二)使用EFCore連接Oracle


一、前言

  在做項目的時候,需要訪問一個Oracle數據庫查詢信息,因為之前都是用sqlserver,對oracle一臉蒙蔽,尤其是使用vs連接oracle,沒用過,然后就在網上一頓查詢。

  以下為本人吐槽:不喜歡看的直接跳過,看解決方案。

  哎,亂七八糟的一大堆,介紹的又繁瑣、又晦澀難懂。。。。這還是宇宙第一ide的風格?連接一個數據庫還需要如此麻煩?太不符合了一切從簡的原則了,百度最多出現的就是以下解決方案:

  1、下載Oracle Developer Tools for Visual Studio 2017 

  這第一步就夠讓我不爽了,什么?我連接一個數據庫還要專門下載一個數據庫管理工具?還只能為VS2017服務?哎,還是冷着頭皮下載了。。。

  2、然后我又換了搜索關鍵詞,搜索“asp.net core連接oracle”,本來搜索的是vs連接oracle,現在出現的另一種解決方案,看似簡單一些,不用下載軟件還是驅動拉,如下操作:

    1. ODP.NET Core 18.3或者更高
    2.Microsoft.EntityFrameworkCore.Relational 2.1或者更高
    3.Access to Oracle Database 11g Release 2 (11.2) 或者更高

  結論:無語- - 用得着這么麻煩嗎?我還是不放棄,繼續尋找更簡便的方法,終於!!!參考地址:https://www.cnblogs.com/NemoWork/p/11013597.html

  我得到了最簡單的使用efcore連接oracle方法。。。啥也不用下載,只需要安裝一個nuget包,下邊介紹具體步驟:

二、最簡單的解決方案

  1、開發環境

    VS2017 / Aspnetcore2.2 / Oracle11.2

  2、下載nuget包:Oracle.EntityFrameworkCore 

  沒錯,就是這么一個簡簡單單的包,就搞定 了!!!

  3、新建數據庫上下文:下面貼代碼

  

using Database.Models.OracleModels;
using Microsoft.EntityFrameworkCore;

namespace Database.DbContextFile
{
    public class MJKDbContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseOracle(@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.140.19)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User ID=rfxmujuku;Password=rfx", b => b.UseOracleSQLCompatibility("11"));
        }


        public DbSet<BT_MJInfo> MJInfo { get; set; }


    }
}

  這里對以上代碼進行簡要說明: 在重寫方法OnConfiguring中,UseOracle的第一個參數為數據庫連接字符串,這種寫法支持遠程連接數據庫(本次項目就是遠程連接服務器,還有另外一種極簡寫法就是直接寫后邊的那些賬號密碼啥的,據說極簡寫法只支持本地連接數據庫,這點我沒有驗證,懶~),第二個參數為指定了數據庫的版本(服務器的oracle版本為11就寫11,為12就寫12,據說是如果這里不指明版本,可能會有異常,我也沒驗證~懶);

  下面的實體MJInfo就是數據庫中的表啦,實體定義如下:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Database.Models.OracleModels
{
    [Table("MODEL_INFO")]
    public class BT_MJInfo
    {
        [Key]
        public string MJ_ID { get; set; }

        public string PRODUCT_NUM { get; set; }

        public Int16 MJ_NUM { get; set; }

        public Int16 MJ_ISUSED { get; set; }

    }
}

  4、直接使用:下面舉個最簡單的例子,查詢語句,就是普通的ef用法!到此完事~

using (var db = new MJKDbContext())
            {
                var count = db.MJInfo.Where(x => x.PRODUCT_NUM == "AA-0321C5").Count();
            }

  5、這里有個補充說明:在oracle某些版本中,不支持主鍵自增,所以在使用insert的時候,可能會報錯,需要你手動賦予主鍵值,如果出現這個問題的話,起碼心里有數,可以再去百度有針對性的搜索解決方案。

三、總結

  哎~明明如此簡單的操作,我愣是費了半天的功夫- - ,究其原因是沒有最先搜索到有用的東西,我是想用EFCore連接oracle,就應該直接搜索EFCore連接oracle,而不應是搜索vs連接oracle,結果完全不同;

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM