我有这样的查询
myEntity.Database.ExecuteSqlCommand("insert into mytable (id, name) values (mytable_SEQ.nextval,'John')")
mytable_SEQ是为生成mytable
的唯一ID而创建的序列获取插入ID的最佳方法是什么?
答案 0 :(得分:1)
没有最佳方式这样的东西。有几种方法可以达到你想要的效果。基本上第一个是执行sequence.CURRVAL
来获取序列的当前值。您还可以使用MAX(id)
进行查询以获取ID列的最大值。
注意:如果您有并发性,这两个都不安全。另一个线程可以修改序列或将新记录插入表中。
为了反映您的评论,我唯一知道的是在您插入行并在同一个交易中选择最大ID时对表使用悲观锁定。
答案 1 :(得分:0)
我绝对知道这不是正确的方法,这就是我到目前为止所做的:
int nextid = myEntity.Database.SqlQuery<int>("select mytable_SEQ.nextval from dual").FirstOrDefault();
然后
myEntity.Database.ExecuteSqlCommand("insert into mytable (id, name) values ("+nextid+",'John')")
我知道可以在一个查询中以某种方式完成..