Dapper.net 中 oracle 的ID自增以及通过事务返回新增ID的方法

问题:

一般oracle中Insert 一条数据:

insert into note
  (noteid, note_title, note_content, note_type, isenabled, creator, creattime, modifer, modifitime)
values
  (seq_note.nextval, v_note_title, v_note_content, v_note_type, v_isenabled, v_creator, v_creattime, v_modifer, v_modifitime);

而使用dapper时,主键位置无法传seq_note.nextval这种格式。

解决方法:

为此,我采用的方法是创建一个触发器,实现ID自增:

create or replace trigger Trigger_Noteid
  before insert
  on NOTE 
  for each row
declare
   nextid number; -- local variables here
begin
  IF :new.noteid IS NULL OR :new.noteid = 0 THEN
    select seq_note.nextval
    into nextid
    from dual;
    :new.noteid := nextid;
  END IF;
end Trigger_AddNote;
 

这样dapper在插入数据的时候就可以不传递主键的值:

  public int AddNote(NoteAddData addNote)
        {
            using (var conn = DbHelper.CreateConnection())
            {
                Entity.Note note = new Entity.Note();
                note.NOTE_TITLE = addNote.title;
                note.NOTE_CONTENT = addNote.content;
                note.ISENABLED = 1;
                note.CREATOR = addNote.userid;
                note.CREATTIME = DateTime.Now;
                note.MODIFER = addNote.userid;
                note.MODIFITIME = DateTime.Now;

                string sql = @"INSERT INTO NOTE
                                (NOTE_TITLE, NOTE_CONTENT, NOTE_TYPE, ISENABLED, CREATOR, CREATTIME, MODIFER, MODIFITIME)
                                    VALUES
                                (:NOTE_TITLE, :NOTE_CONTENT, :NOTE_TYPE, :ISENABLED, :CREATOR, :CREATTIME, :MODIFER, :MODIFITIME)
                              ";
                string sql_curid = @"select seq_note.currval from dual";

                conn.Open();
                IDbTransaction transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
                int rowCount = conn.Execute(sql, note,transaction);
                int newid = int.Parse(conn.ExecuteScalar(sql_curid, null, transaction).ToString());

                transaction.Commit();

                return newid;
            }
        }

 

转载于:https://my.oschina.net/dyc1122/blog/862976

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值