• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Asp.netcore2.踩坑记录(二)使用EFCore连接Oracle

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  在做项目的时候,需要访问一个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,结果完全不同;

    


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET中动态加载样式表发布时间:2022-07-10
下一篇:
在ASP.NET中实现UrlRewriting发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap