Aspcore2.踩坑记录(⼆)使⽤EFCore连接Oracle
⼀、前⾔
  在做项⽬的时候,需要访问⼀个Oracle数据库查询信息,因为之前都是⽤sqlserver,对oracle⼀脸蒙蔽,尤其是使⽤vs连接oracle,没⽤过,然后就在⽹上⼀顿查询。
  以下为本⼈吐槽:不喜欢看的直接跳过,看解决⽅案。
  哎,乱七⼋糟的⼀⼤堆,介绍的⼜繁琐、⼜晦涩难懂。。。。这还是宇宙第⼀ide的风格?连接⼀个数据库还需要如此⿇烦?太不符合了⼀切从简的原则了,百度最多出现的
就是以下解决⽅案:
  1、下载Oracle Developer Tools for Visual Studio 2017
  这第⼀步就够让我不爽了,什么?我连接⼀个数据库还要专门下载⼀个数据库管理⼯具?还只能为VS2017服务?哎,还是冷着头⽪下载了。。。
  2、然后我⼜换了搜索关键词,搜索“asp 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) 或者更⾼
  结论:⽆语- - ⽤得着这么⿇烦吗?我还是不放弃,继续寻更简便的⽅法,终于!!!参考地址:
  我得到了最简单的使⽤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=rf        }
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,结果完全不同;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。