使用EF在oracle中获取插入ID的最佳方法是什么?

时间:2017-08-24 14:18:39

标签: c# oracle entity-framework sequence

我有这样的查询

myEntity.Database.ExecuteSqlCommand("insert into mytable (id, name) values (mytable_SEQ.nextval,'John')")

mytable_SEQ是为生成mytable

的唯一ID而创建的序列

获取插入ID的最佳方法是什么?

2 个答案:

答案 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')")

我知道可以在一个查询中以某种方式完成..