** 背景 **

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

每天的订单数都是从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()

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

EF中创建、使用Oracle数据库的Sequence(序列)功能的更多相关文章

  1. SQLSERVER 创建对Oracle数据库的DBlink以及查询使用

    1. 与针对oracle数据库一样, 在sqlserver中创建对oracle数据库的dblink 安全性上面也进行定义(貌似不需要跟访问字符串只需要填一个即可) 发现有的版本改注册表不管用 还得修改 ...

  2. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  3. EntityFramework_MVC4中EF5 新手入门教程之四 ---4.在EF中创建更复杂的数据模型

    在以前的教程你曾与一个简单的数据模型,由三个实体组成.在本教程中,您将添加更多的实体和关系,并通过指定格式. 验证和数据库映射规则,您将自定义数据模型.你会看到自定义的数据模型的两种方式: 通过添加属 ...

  4. 连接别人创建的ORACLE数据库

    以oracle10g版本为例,本机必须安装oralce10g的客户端或oralce10g的服务器 方法一(从服务器配置): 第一步:打开配置和移植工具-->Net Manager 第二步:选中服 ...

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

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

  6. EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  7. asp.net中membership使用oracle数据库(一)

    第一步 数据库的准备 使用 oracle 11g的数据库 需要安装好,安装过程中先决条件检查失败的处理:确认server服务已运行 cmd->net share c$=c: 就可以通过 orac ...

  8. C# 的EF框架怎么连接Oracle数据库

    安装odp.net ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNames.Ora文件 不需要配置环境变量:完全的傻瓜式的在没有安装oracle数据库或 ...

  9. Oracle数据库的版本变迁功能对比

    Oracle数据库自发布至今,也经历了一个从不稳定到稳定,从功能简单至强大的过程.从第二版开始,Oracle的每一次版本变迁,都具有里程碑意义. 1979年的夏季,RSI(Oracle公司的前身,Re ...

随机推荐

  1. Unix系统中system函数的返回值

    网上关于system函数的返回值说明很多很详细但却不直观,这里搬出apue 3rd Editon中实现system函数的代码来说明其返回值. #include <sys/wait.h> # ...

  2. 报错:Type mismatch: cannot convert from Object to Car

    问题描述: 一个非常简单的spring项目,用静态工厂方法配置bean实例.项目的目录结构如下: 代码如下: Car.java package com.tt.spring.beans.factory; ...

  3. c# DataTable 数据集处理DataTableHandler

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. ADO Recordset 对象链接

    http://baike.baidu.com/link?url=4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9n ...

  5. c++多线程编程:实现标准库accumulate函数的并行计算版本

    今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产 ...

  6. TreeMap实现原理及源码分析

    TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)实现.该映射根据其键的自然顺序进行排序,或者根据创建时提供的Comparator进行排序. 对于TreeMa ...

  7. Java调用本地方法又是怎么一回事

    JNI JNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少 ...

  8. Objective C - 4 - 下载图片并且加载到View

    #import "LoadInternetImageViewController.h" @interface LoadInternetImageViewController () ...

  9. UNIX 环境高级编程 文件和目录

    函数stat , fstat , fstatat , lstat stat函数返回与此文件有关的信息结构. fstat函数使用已打开的文件描述符(而stat则使用文件名) fstatat函数 为一个相 ...

  10. CFE Bootloader详解 — 引导过程

    CFE命令 CFE引导过程 系统加电后,CFE从boot.S (src/shared/boot.S)开始执行,完成判断芯片类型.设置时钟.初始化缓存.把自身加载进RAM等任务后,跳转到c_main() ...