oracle精简版_使用Entity Framework Core访问数据库(Oracle篇)

前言

哇。。看看时间 真的很久很久没写博客了 将近一年了。

最近一直在忙各种家中事务和公司的新框架  终于抽出时间来更新一波了。

本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。

强调一下,本篇文章发布之前 关于Entity Framework Core访问oracle数据库的甲骨文官方dll还未正式发布。

不过我已经在项目中用起来了。。介意的兄弟可以先等等。。甲骨文说的是本年第三季度。。

环境

1.官方文档中支持的环境

首先我们来看看所谓的官方支持吧。

操作系统:

1. Windows x64
  1.1Windows 8.1 (Pro and Enterprise Editions)
  1.2Windows 10 x64 (Pro, Enterprise, and Education Editions)
  1.3Windows Server 2012 R2 x64 (Standard, Datacenter, Essentials, and FoundationEditions)
  1.4Windows Server 2016 x64 (Standard and Datacenter Editions)
2.Linux x64
  2.1Oracle Linux 7
  2.2Red Hat Enterprise Linux 7


.NET版本:
  1.NET Core 2.1 或者更高
  2.NET Framework 4.6.1 或者更高


· Entity Framework Core版本:
  1.   2.1版本或者更高


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

正文

本篇将采取CodeFirst的形式来创建数据库。。

1.创建数据库

我们创建上下文与实体如下:

    public class BloggingContext : DbContext
{public DbSet Blogs { get; set; }public DbSet Posts { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseOracle(@"SQL Contion", b => b.UseOracleSQLCompatibility("11"));
}protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
}public class Blog
{public int BlogId { get; set; }public string Url { get; set; }//public int Rating { get; set; }public List Posts { get; set; }
}public class Post
{public int PostId { get; set; }public string Title { get; set; }public string Content { get; set; }public int BlogId { get; set; }public Blog Blog { get; set; }
}

这里我们先介绍第一个要注意的地方,UseOracle参数里面跟的UseOracleSQLCompatibility方法,里面参数传递的11,指的是oracle11g版本。如果你是12g版本 请传递12.

因为11g和12g的SQL语法有较多不同的地方,所以用这个来区分。

然后我们add一个版本 执行nuget命令如下:(PS:不懂如何使用codeFirst的请移步:Entity Framework Core 之数据库迁移)

Add-Migration BanBen1

然后将版本更新到数据库如下:

Update-Database

数据库生成成功。

2.关于oracle序列的坑

我们这时候编写插入语句如下:

using (BloggingContext db = new BloggingContext())
{
db.Blogs.Add(new Blog { Url = "aaaaa1" });
db.SaveChanges();
}

看似没问题的语句,会得到一个错误消息如下:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

这是因为我们没有给主键赋值导致的错误信息。(因为oracle没有自增主键,只能通过序列自增)

那么自增序列如何使用呢?

我们查看数据库会发现,如图:3112cc9fcf0ed29cffdc97244afd21f6.png

codefirst已经帮我们生成了序列,但是并不会自动使用。我们需要配置一下:

在上下文中的OnModelCreating方法添加如下代码:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity(entity =>
{
entity.ToTable("Posts");
entity.Property(o => o.PostId).ForOracleUseSequenceHiLo("Posts_PostId_sq3");
});
modelBuilder.Entity(entity =>
{
entity.ToTable("Blogs");
entity.Property(o => o.BlogId).ForOracleUseSequenceHiLo("Blogs_BlogId_sq1");
});
}

指定对应表的序列。

然后在运行。即可添加成功了。

3.关于在Docker中部署的坑

在我的生产项目中。应该是打包到docker直接运行部署的。

不过在打包到docker的过程中又出现了诡异的问题。

就不重现了。。反正就是开发环境没有问题。。直接放到linux中也没问题。但是一旦打包到docker运行 就会查询不到数据。

经过多方查证 最终发现是微软提供的rumtime镜像,因为是精简版系统 所以里面的市区有问题。

在dockerfile中添加如下语句 在生成的时候 设置好时区:

FROM microsoft/dotnet:2.1-aspnetcore-runtimeENV TZ=Asia/Shanghai

这样就能成功的操作到数据库了。。

结束语

近期移植了好些个项目到.NET CORE 或多或少遇到了不少坑。。应该算是采坑无数了。。

其实大部分都集中在数据库连接这一块。。比如oracle  DB2 。。(PS:感觉也就mysql与sql server支持是最好的。。)

DB2虽然官方发布了。但是他的坑其实比oracle还大。。我们下篇在写。。

原文地址:https://www.cnblogs.com/GuZhenYin/p/10756548.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 902e81b1862167d4ae03d009c4b47b19.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java String部分源码解析

String类型的成员变量 /** String的属性值 */ private final char value[];/** The offset is the first index of the storage that is used. *//**数组被使用的开始位置**/private final int offset;/** The count is the number of characters in the String. *//**String中…

javascript之闭包理解以及应用场景

1 function fn(){2 var a 0;3 return function (){4 return a;5 } 6 }如上所示,上面第一个return返回的就是一个闭包,那么本质上说闭包就是一个函数。那么返回这个函数有什么用呢?那是因为这个函数可以调用到它外部的a…

faster rcnn学习之rpn、fast rcnn数据准备说明

在上文《 faster-rcnn系列学习之准备数据》,我们已经介绍了imdb与roidb的一些情况,下面我们准备再继续说一下rpn阶段和fast rcnn阶段的数据准备整个处理流程。 由于这两个阶段的数据准备有些重合,所以放在一起说明。 我们并行地从train_rpn与train_fas…

sql server规范

常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4.自增长标识建议采用bigint数据类型 (数据量一大,用int类型就装不下,那以后改造就麻烦了)5.时间类型建议采用为dat…

php 结构体_【开发规范】PHP编码开发规范下篇:PSR-2编码风格规范

之前的一篇文章是对PSR-1的基本介绍接下来是PSR-2 编码风格规范,它是 PSR-1 基本代码规范的继承与扩展。PSR-1 和PSR-2是PHP开发中基本的编码规范,大家其实都可以参考学习下,虽然说每个开发者都有自己熟悉的一套开发规范,但是我觉…

faster rcnn学习之rpn训练全过程

上篇我们讲解了rpn与fast rcnn的数据准备阶段,接下来我们讲解rpn的整个训练过程。最后 讲解rpn训练完毕后rpn的生成。 我们顺着stage1_rpn_train.pt的内容讲解。 name: "VGG_CNN_M_1024" layer {name: input-datatype: Pythontop: datatop: im_infotop: …

Android学习之高德地图的通用功能开发步骤(二)

周一又来了,我就接着上次的开发步骤(一)来吧,继续把高德地图的相关简单功能分享一下 上次写到了第六步,接着写第七步吧。 第七步:定位 地图选点 路径规划 实时导航 以下是我的这个功能NaviMapActivity的…

Oracle中分区表中表空间属性

Oracle中的分区表是Oracle中的一个很好的特性,可以把大表划分成多个小表,从而提高对于该大表的SQL执行效率,而各个分区对应用又是透明的。分区表中的每个分区有独立的存储特性,包括表空间、PCT_FREE等。那分区表中的各分区表空间之…

期刊论文格式模板 电子版_期刊论文的框架结构

最近看到很火的一句话,若不是生活所迫,谁愿意把自己弄得一身才华。是否像极了正想埋头苦写却毫无头绪的你?发表期刊论文的用途 :1: 学校或者单位评奖,评优,推免等2:申领学位证(如毕业硬性要求&a…

faster rcnn学习之rpn 的生成

接着上一节《 faster rcnn学习之rpn训练全过程》,假定我们已经训好了rpn网络,下面我们看看如何利用训练好的rpn网络生成proposal. 其网络为rpn_test.pt # Enter your network definition here. # Use ShiftEnter to update the visualization. name: &q…

初学java之常用组件

1 2 import javax.swing.*;3 4 import java.awt.*;5 class Win extends JFrame6 {7 JTextField mytext; // 设置一个文本区8 JButton mybutton;9 JCheckBox mycheckBox[]; 10 JRadioButton myradio[]; 11 ButtonGroup group; //为一…

anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda

打算把公众号和知乎专栏的文章搬运一点过来。 历史文章可以去关注我的公众号:不二小段,或者知乎:段小草。也欢迎来看我的视频学Python↓↓↓跟不二学Python这篇文章可以作为Python入门的第一站可以结合这期视频来看,基本上是这期视…

dubbo控制中心部署,权重配置,以及管控台中各个配置的简单查看

dubbo给我们提供了现成的后台管理网站,专门管理这些服务,应用,路由规则,动态配置,访问控制、权重控制、负载均衡等等,还可以查看系统日志,系统状态,系统环境等等,功能很是…

1001种玩法 | 1001种玩法--数据存储(2)

新智云www.enncloud.cn第二趴 Flockdb:一个高容错的分布式图形数据库 FlockDB是一个存储图数据的分布式数据库,图数据库的存储对象是数学概念图论里面的图,而非图片。Twitter使用它来存储人与人之间的关系图,这些关系包括&#xf…

Android ListView分页,动态添加数据

1.ListView分页的实现,重点在于实现OnScrollListener接口,判断滑动到最后一项时,是否还有数据可以加载, 我们可以利用listView.addFootView(View v)方法进行提示 自定义一个ListView(这里本来想进行一些自定已修改的。…

faster rcnn的测试

当训练结束后,faster rcnn的模型保存在在py-faster-rcnn/output目录下,这时就可以用已有的模型对新的数据进行测试。 下面简要说一下测试流程。 测试的主要代码是./tools/test_net.py,并且使用到了fast_rcnn中test.py。 主要流程就是&…

Android-Universal-Image-Loader 的使用说明

这个图片异步载入并缓存的类已经被非常多开发人员所使用,是最经常使用的几个开源库之中的一个,主流的应用,随便反编译几个火的项目,都能够见到它的身影。但是有的人并不知道怎样去使用这库怎样进行配置,网上查到的信息…

faster rcnn end2end 训练与测试

除了前面讲过的rpn与fast rcnn交替训练外,faster rcnn还提供了一种近乎联合的训练,姑且称为end2end训练。 根据论文所讲,end2end的训练一气呵成,对于前向传播,rpn可以作为预设的网络提供proposal.而在后向传播中&…

基于像素聚类的分割方法基于slic的方法_博士论文摘要 | 张荣春:数码影像与TLS点云数据融合提取地质结构面方法研究...

《测绘学报》构建与学术的桥梁 拉近与权威的距离数码影像与TLS点云数据融合提取地质结构面方法研究张荣春1,21.南京邮电大学地理与生物信息学院, 江苏 南京 210023;2.河海大学地球科学与工程学院, 江苏 南京 211100收稿日期:2019-03-27基金项目:国家自然…

jaxb转xml空值双标签_单品运营思维:标签-词路-聚焦-直搜-超直

非标品标签思维:针对非标品 主要是2.0为主的打法根据搜索入池的关键词,有什么词做什么词。有个细节:不一定进什么词做什么词,这个维度当中加入3.0的思维3.0入手 转2.0再切3.0(检测词路健康度,非严格意义估算单量)举例&…