当前位置: 移动技术网 > IT编程>开发语言>.net > Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库

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

2020年01月16日  | 移动技术网IT编程  | 我要评论

柳青 创业史,米奇妙妙屋英文全集,尹时允整容前后照片

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)在 windowsmacos 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)针对可测试性进行构建。

3razor pages 可以使基于页面的编码方式更简单高效。

4blazor 允许你在浏览器中使用 c# javascript。 共享全部使用 .net 编写的服务器端和客户端应用逻辑。

5)能够在 windowsmacos linux 上进行开发和运行。

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

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

8)支持使用 grpc 托管远程过程调用 (rpc)

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

10)内置依赖项注入。

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

12)能够托管于以下各项:kestreliishttp.sysnginxapachedocker

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

 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网