** 背景 **

项目中订单号原来的生成规则由日期加随机数组成,后期需求决定将订单号生成规则更改为生成日期加当天当前订单数。

每天的订单数都是从0开始的,每生成一个订单,订单数就应该加1.订单数应该是持久的,写在Session中或者Memcached缓存中,当网站重启或者服务器重启时都会面临丢失的问题,所以只能存在数据库中。幸好Oracle数据库提供了Sequence(序列)功能,我们来看下Sequence(序列)的概述及其用法。

** 概述 **

Oracle提供了Sequence对象,由系统提供自增长的序列号,通常用于生成数据库的自增长主键或序号的地方。
Sequence是数据库系统按照一定规则自动增加的数字序列。这个序列一般作为代理主键(因为不会重复),没有其他任何意义。1

** 基本用法 **

CREATE SEQUENCE emp_sequence -序列名
INCREMENT BY 1 — 每次递增数值
START WITH 1 — 从1开始计数
MAXVALUE 999999 --最大值 || NOMAXVALUE — 不设置最大值
CYCLE - 循环,达到最大值从最小值开始||NOCYCLE — 一直累加,不循环
CACHE 10;-缓存数值

下面我们就来看EF的DbContext具体使用:
** 1. 判断是否存在名为ODORDER的序列 **

int count = context.Database.SqlQuery<int>("SELECT count(*) FROM All_Sequences where Sequence_name='ODORDER'").FirstOrDefault()

如数据库中存在该序列,则返回的数值应大于0。
** 2. 每天的订单数都应该是从新开始的,所以简单做法如果存在ODORDER该序列,我们先删除. **

context.Database.ExecuteSqlCommand("DROP SEQUENCE ODORDER")

** 3. 创建名为ODORDER的序列 **

 context.Database.ExecuteSqlCommand("CREATE SEQUENCE ODORDER INCREMENT BY 1 START WITH 100000 MAXVALUE 900000 MINVALUE 100000 CYCLE CACHE 20 ");

** 4. 获取最新订单数 **

context.Database.SqlQuery<int>("select ODORDER.nextval from dual").FirstOrDefault()

原创文章,如有转摘请注明来源!

转载于:https://www.cnblogs.com/beyond1983/p/5760353.html

EF中创建、使用Oracle数据库的Sequence(序列)功能相关推荐

  1. 数据库在EF中创建模型

    数据库在EF中创建模型,最简单的理解就是把数据库的字段以及关系映射到项目中,在项目中通过EF框架和LINQ语句直接对数据库数据进行增删改查.下边手把手教你建立模型. 1.建立一个项目,添加新项目,选择 ...

  2. 在oracle数据库中显示异常,Oracle数据库出现ORA-01034错误的解决方案

    类型:数据库类大小:42.1M语言:中文 评分:5.0 标签: 立即下载 使用Oracle数据库的朋友经常会碰到的错误ORA-3113 "end of fileon communicatio ...

  3. oracle数据库中常用语法,oracle数据库常用语法(中文注释版)

    -- 查看系统所有变量值 show all -- 显示当前连接用户 show user -- 显示表结构 desc 表名 -- 显示错误 show error -- 退出 exit; 表空间是数据库中 ...

  4. oracle中call用法,Oracle数据库中 call 和 exec的区别

    Oracle数据库中 call 和 exec的区别 今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: ex ...

  5. Oracle数据库中的同义词,数据库链接和序列

    目录 1.同义词 (1)可视化方法创建同义词 (2)命令方式创建同义词 (3)删除同义词 2.数据库链接 (1)可视化方式创建 (2)使用命令方式 (3)为远程数据库的表创建同义词 (4)删除数据库链 ...

  6. Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作

    在Java中对Oracle数据库的操作分为两种:一.查询.二.非查询. 下面是我对其进行总结: 一.查询数据 /** * 根据用户代码查询* @param userId* @return 如果存在返回 ...

  7. oracle数据库中索值,Oracle数据库中的索引详解

    Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...

  8. oracle中创建游标,oracle 存储过程创建游标

    Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...

  9. oracle数据库中基础知识,oracle数据库基础知识

    oracle数据库基础知识 -- End loop --1 declare pnum number(4):=0; begin while pnum < 10 loop dbms_output.p ...

最新文章

  1. PNAS:张航课题组揭示人类为何“扭曲”概率信息
  2. python中的enumerate函数用于遍历序列中的元素以及它们的下标
  3. JRE和JDK的区别分别代表什么
  4. 中国半挂车行业投资前景预测与十四五投资战略规划分析报告2021年版
  5. Linux创建多个子线程并回收
  6. svn 钩子 post-commit 出现255错误解决办法
  7. T-SQL之公用表表达式(CTE)
  8. 移动端js事件-了解
  9. Go 语言泛型,简明入门教程
  10. Python学习 第3天 VS与PyCharm使用对比
  11. 自己动手写Docker系列 -- 6.3 手动配置容器网络(下)
  12. Django-manage.py
  13. 电子书分页,翻页效果,字体大小调整和基本功能实现
  14. 李践《高效人士的五项管理-行动日志》 表格
  15. Native Instruments Maschine 2 v2.14.7 WiN-MAC 节奏音乐制作软件含拓展
  16. SAP PI SLD RZ70 系统架构目录数据提供者 HTTP(S) 配置
  17. 实践篇(四):Apache jena SPARQL endpoint及推理
  18. t480安装matlab不了,thinkpad t480和t490的区别
  19. 孙宏斌频变“脸谱” 乐视网该何去何从?
  20. 疑难杂症:内存明明很富裕,却还是申请不到?

热门文章

  1. SpringBoot Idea快速创建工程
  2. itertools chain
  3. android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法
  4. 看完这个故事,你就知道程序员为什么选公司就要去上升期的
  5. 宿迁市烟草专卖局(公司)系统信息系统运行维护管理办法(试行)
  6. Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
  7. 内存条上面参数详解_「内存」新旧光威16GB内存条参数对比,发现镁光颗粒
  8. java 静态代码块有什么用,java编程开发静态代码块的使用方法都有哪些
  9. java中输入两个数组并显示_java-将输入存储在两个相关的数组中
  10. python删除某个文件夹_Python 实现删除某路径下文件及文件夹