Asp.net Core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库

1、前言

本次主要采用Asp.net core3.1来实现API服务(优势:跨平台),其中此技术比较新颖,其中连接Oracle遇到各种困难(特别是资料较少,各个插件版本比较多,且依赖的版本也有要求),经过各种尝试,最终可以连接上Oracle数据库,此处仅仅是demo。

2、技术路线

2.1 Asp.net core 3.1

ASP.NET Core 是一个跨平台的高性能开源框架,用于生成基于云且连接 Internet 的新式应用程序。 使用 ASP.NET Core,您可以:

1)创建 Web 应用程序和服务、IoT 应用和移动后端。

2)在 Windows、macOS 和 Linux 上使用喜爱的开发工具。

3)部署到云或本地。

4)在 .NET Core 或 .NET Framework 上运行。

为何选择 ASP.NET Core?

数百万开发人员使用过(并将继续使用)ASP.NET 4.x 创建 Web 应用。 ASP.NET Core 是重新设计的 ASP.NET 4.x,更改了体系结构,形成了更精简的模块化框架。

ASP.NET Core 具有如下优点:

1)生成 Web UI 和 Web API 的统一场景。

2)针对可测试性进行构建。

3)Razor Pages 可以使基于页面的编码方式更简单高效。

4)Blazor 允许你在浏览器中使用 C# 和 JavaScript。 共享全部使用 .NET 编写的服务器端和客户端应用逻辑。

5)能够在 Windows、macOS 和 Linux 上进行开发和运行。

6)开放源代码和以社区为中心。

7)集成新式客户端框架和开发工作流。

8)支持使用 gRPC 托管远程过程调用 (RPC)。

9)基于环境的云就绪配置系统。

10)内置依赖项注入。

11)轻型的高性能模块化 HTTP 请求管道。

12)能够托管于以下各项:Kestrel、IIS、HTTP.sys、Nginx、Apache、Docker

13)并行版本控制。

14)简化新式 Web 开发的工具。

2.2 Microsoft.EntityFrameworkCore2.2.6

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。

离线下载地址:https://www.nuget.org/packages/Oracle.EntityFrameworkCore/

2.3 Oracle.EntityFrameworkCore2.1.19

此插件主要是为了连接Oracle数据库;

依赖项:

Microsoft.EntityFrameworkCore.Relational (>= 2.1.11 && < 3.0.0)

Oracle.ManagedDataAccess.Core (>= 2.19.60 && < 2.20.0)

3、总结

在经过两天的尝试,最大的坑是此Oracle.EntityFrameworkCore2.1.19插件需要有依赖插件,并且版本要对,否则一直会报错;

3.1尝试Citms.EntityFrameworkCore.Oracle连接Oracle

其中会报错:System.TypeLoadException:“Method 'get_Info' in type 'Microsoft.EntityFrameworkCore.Oracle.Infrastructure.Internal.OracleOptionsExtension' from assembly 'Citms.EntityFrameworkCore.Oracle, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.”。

3.2尝试Oracle.ManagedDataAccess.Core连接Oracle

最终通过ASP.NET Core3.1通过EF Core连接Oracle,需要注意依赖项版本号问题。

4、源码

4.1实体

[Table("数据库中表名")]

    public class BaseEntity

    {

        [Column("表中字段")]

        public string Id { get; set; }

        [Column("表中字段")]

        public string Name { get; set; }

}

4.2 数据库上下文

    public class EntityOracleDBContext: DbContext

    {

        public static readonly LoggerFactory MyLoggerFactory

       = new LoggerFactory(new[] { new DebugLoggerProvider() });

        public EntityOracleDBContext(DbContextOptions<EntityOracleDBContext> options) : base(options)

        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)

        {

           modelBuilder.Entity<BaseEntity>();

        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

        {

            optionsBuilder

                .UseLoggerFactory(MyLoggerFactory);

        }

        public DbSet<BaseEntity> TodoItems { get; set; }

    }

4.3 Controller层

    [Route("api/[controller]")]

    public class EmployeeController : Controller

    {

        EntityOracleDBContext context;

        public EmployeeController(EntityOracleDBContext context)

        {

            this.context = context;

        }

        // GET: api/<controller>

        [HttpGet]

        public IEnumerable<string> Get()

        {

            List<BaseEntity> todoItems = context.TodoItems.ToList();

            return todoItems.Select(t=>t.Id);

        }

        // GET api/<controller>/5

        [HttpGet("{id}")]

        public string Get(string id)

        {

            BaseEntity todoItem = context.TodoItems.Find(id);

            return todoItem.Name;

        }

        // POST api/<contdroller>

        [HttpPost]

        public void Post([FromBody]string value)

        {

        }

        // PUT api/<controller>/5

        [HttpPut("{id}")]

        public void Put(int id, [FromBody]string value)

        {

        }

        // DELETE api/<controller>/5

        [HttpDelete("{id}")]

        public void Delete(int id)

        {

        }

    }

4.4 调取测试

https://localhost:5001/api/employee/927b582d-a897-4d7b-8cca-bd0c63386ad9

 

Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库的更多相关文章

  1. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

  2. asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

    一.   反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...

  3. Asp.net core下利用EF core实现从数据实现多租户(1)

    前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...

  4. Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作

    前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...

  5. 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

    前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...

  6. asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)

    一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...

  7. asp.net core 系列 21 EF现有数据库进行反向工程

    一.概述 在上篇中使用EF基于数据模型创建数据库,  本篇继续使用 EF  基于数据库创建数据模型.  实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序.已有 ...

  8. asp.net core 系列 20 EF基于数据模型创建数据库

    一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种cod ...

  9. ASP.NET Core 中使用EF Core 将实体映射到数据库表的方法(SQL Server)

    前段时间听过一个关于使用ASP.NET Core建立项目的视频.其中使用EF Core映射到数据库的部分是按部就班地学习.今天自己建立项目时,有些步骤已经有一些遗忘.所以写下这篇文章,顺便理清思路. ...

随机推荐

  1. Ecplise中指定tomcat里Web项目发布文件

    有时候发布项目时,我们会看到Ecplise会自动把一些并不是我们想需要的文件也发布到服务器上,可以通过以下方式解决: Properties->Deployment Assembly

  2. FFmpeg被声明为已否决的解决方案

    参考雷神的最简单的打印Hello World的程序: #include <stdio.h> #include <string.h> extern "C" { ...

  3. Magicodes.IE在Docker中使用

    Magicodes.IE在Docker中使用 更新日志 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_ ...

  4. Flyway 的使用及Spring Boot集成Flyway

    一.简单介绍 Flyway 是一个开源.跨环境的数据库迁移工具,它强烈主张简单性和约定性而不是配置. Flyway 是一个便于多人开发对数据库管理的工具,将sql语句写入文件中,只需要在控制台输入指令 ...

  5. 青石巷-小L的爸爸

    小L有一个和谐的家. 爸爸具体职业不明,在统战部工作,刚开始和妈妈在一起工作. 妈妈是个会跳舞的语文老师. 奶奶之前也是个老师. 爷爷是个建筑师. 爸爸是最有文采的一个.在小L看来,他的一言一行,一举 ...

  6. vs 中明明包含了头文件所在路径,但是却找不到头文件

    vs基本不会出错,那么出错的只能是自己了. 哎,又被自己给蠢死了. 你可能在上面两个地方添加好了include 目录,但是却依然编译失败,失败的提示是找不到头文件所在路径,这是为什么呢. 很简单,因为 ...

  7. Gdal随笔

    开始研究遥感影像的分割,尝试去通过gdal对影像进行读取并对图像进行分割.过程中遇到了许多问题,现总结如下. 1.error1:range must be finite 报这个错误是因为数组中有Nan ...

  8. [Effective Java 读书笔记] 第6章 枚举和注解

    第三十条 用enum代替int 总得来说,使用enum有几点好处 1.编译时的类型安全, 2.可以保证就是自己定义的值,不会有月结风险, 3.每个枚举类型有自己的命名空间 4.枚举可以添加任意的方法和 ...

  9. Force removing ActivityRecord no saved state问题的原因分析

    关键字,crash Force removing ActivityRecord,app died, no saved state的原因 相机拍摄的过程中断电,拍了一张黑图 I/ActivityMana ...

  10. 北京智和信通IT运维管理系统二次开发服务提供商

    随着云计算.大数据.物联网.移动互联网.人工智能.5G等高新技术的快速发展,数据中心及网络基础设施呈现出井喷式的增长模式,对设备商来说,多.快.好.省的实现定制化网络管理开发,可极大的扩充设备适用范围 ...