EntityFramework实体默认值遇到Oracle自增主键
1. Oracle实现主键自动增长
一般我们在Oracle实现主键自动增长,通常通过序列加触发器实现。
定义序列用于获取递增数字
CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n] [{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}]
定义触发器,关联序列和表,并在插入数据前补充主键ID
create [or replace] tigger 触发器名 before insert
on 表名
[for each row]
beginselect 序列名.nextval into :new.id from dual;
end
一般我们会加上条件以应对已经指定主键的情况
create [or replace] tigger 触发器名 before insert
on 表名
[for each row WHEN(NEW.ID IS NULL)]
beginselect 序列名.nextval into :new.id from dual;
end
2. EntityFramework默认值带来的问题
通过触发器和序列一般我们就可以实现主键的自动增长,但是在EF中,实体中的主键会被赋值为默认值0。这导致触发器达不到触发的(默认触发条件),
这时我们就需要调整触发器执行条件:当未指定id或者id为默认值0时自动生成主键。
create [or replace] tigger 触发器名 before insert
on 表名
[for each row WHEN(NEW.ID IS NULL or NEW.ID = 0)]
beginselect 序列名.nextval into :new.id from dual;
end
转载于:https://www.cnblogs.com/zhangdk/p/8711304.html
EntityFramework实体默认值遇到Oracle自增主键相关推荐
- oracle自增主键用途,Oracle主键自增
在设置主键自增时有几种方法,今天介绍其中一种方法:sequence+trigger 1.创建表 create table tbl_card --创建校园卡表 ( id int primary key, ...
- Oracle自增主键的添加[sequence]--表数据已存在
--增加主键ID alter table CLERK_COMPARE add id number(16);--设置sequence使ID自增 create sequence SEQ_IDminvalu ...
- mybatis获取mysql自增主键_Mybatis获取数据库自增主键
一般我们都为将表中主键列设置为自增,当我们执行插入语句时,比如这样 //测试添加 Employee employee = new Employee(null, "jerry4",n ...
- MySQL自增主键auto_increment原理 与 自增主键出现间隙不连续现象的定位
一.背景: 1.1.业务描述与SQL: 为了保存机器上报信息(业务需求是每个机器只需保存最新的一条记录),原 SQL 语句如下(其中,machineId 的为唯一索引,t_report_pad 的 i ...
- mybatis使用statement.getGenreatedKeys(); useGeneratedKeys=”true”;使用自增主键获取主键值策略和Oracle不支持自增,Oracle使用序列
parameterType: 参数类型, 可以省略 mysql支持自增主键,自增主键的获取, mybatis也是利用statement.getGenreatedKeys(); useGenerate ...
- oracle 添加默认值列,Oracle 11g增加列,并带默认值的新特性
永久链接:http://www.ixdba.com/html/y2007/m08/159-oracle11g-add-column.html 老和尚在他的blog中描述了了这个问题,我这里做一个详细的 ...
- datatable如何生成级联数据_通过源码分析Mybatis是如何返回数据库生成的自增主键值?...
在Mybatis中,执行insert操作时,如果我们希望返回数据库生成的自增主键值,那么就需要使用到KeyGenerator对象. 需要注意的是,KeyGenerator的作用,是返回数据库生成的自增 ...
- 通过源码分析Mybatis是如何返回数据库生成的自增主键值?
在Mybatis中,执行insert操作时,如果我们希望返回数据库生成的自增主键值,那么就需要使用到KeyGenerator对象. 需要注意的是,KeyGenerator的作用,是返回数据库生成的自增 ...
- Mysql和Oracle获取自增主键
mysql <!-- parameterType:参数类型,可以省略, 获取自增主键的值: mysql支持自增主键,自增主键值的获取,mybatis也是利用statem ...
最新文章
- mysql5.7+ 虚拟列,json使用初体验
- 音视频技术开发周刊 | 176
- 亚信安全首推MSP创新型合作伙伴业务模式 助力企业畅享云端快捷服务
- UpdatePanelAnimation
- 留学生吐槽阿里面试几宗罪:槽点太多,不符合阿里大企业形象!
- win10自带sftp服务器_win10搭建sftp服务器搭建
- rust石墙掉耐久_rust恢复房子耐久 | 手游网游页游攻略大全
- 与世界有怎样的关系,便拥有了怎样的自己
- 一名菜鸟程序猿对前端的简单理解及介绍
- CSS中的行盒(line-boxes)和行内盒子(line-box)
- 日语学习之——长音促音
- 将 C++ 对象暴露给 QML
- 如何快速找出电脑里的所有视频\照片\文件
- WebRTC实践获取视频流
- WPF 通用权限开发框架 (ABP)
- Unity学习——音效系统+音频过滤器+音频混响区+音频管理器
- kinect V2开发API
- php 模拟 cas,CAS的PHP客户端实践:PHP程序实现单点登录
- Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found
- 使用Python爬取itcast网站的视频
热门文章
- Promise 让异步更优
- Android在Service中显示Dialog
- 虚拟机安装 xp步骤(参照百度文库)
- ubuntu 下重装mysql若干问题
- ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
- Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
- Linux系统的启动引导过程(转)
- WenLan-10亿参数!别只玩GPT,来看看人大中科院联手打造第一个大规模多模态中文预训练模型BriVL...
- 深圳 | 腾讯AI Lab招聘CVCG研究员及实习生
- PyTorch如何加速数据并行训练?分布式秘籍大揭秘