zoukankan      html  css  js  c++  java
  • 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]
    begin
     select 序列名.nextval into :new.id from dual; 
    end
    

    一般我们会加上条件以应对已经指定主键的情况

    create [or replace] tigger 触发器名 before insert
    on 表名
    [for each row WHEN(NEW.ID IS NULL)]
    begin
     select 序列名.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)]
    begin
     select 序列名.nextval into :new.id from dual; 
    end
    
  • 相关阅读:
    mongoDb学习以及spring管理 (包括百度云配置)
    Python循环嵌套
    Web应用功能测试测试点
    二维数组联通子数组
    二维数组最大子数组问题
    环一维数组最大子数组问题
    电梯调研
    最大子数组问题
    小学生题目
    3.13题目思路
  • 原文地址:https://www.cnblogs.com/zhangdk/p/8711304.html
Copyright © 2011-2022 走看看