使用生成器在 Firebird 数据库中插入新行

问题描述

有一种方法可以使用生成器将新行插入到 Firebird 数据库中,但出于本项目的目的,我不应该使用触发器来获取要插入的表的下一个 ID。

我在 .NET MVC 项目中使用 Firebird 实体框架。我该怎么做才能保证插入的新行没有重复的主键或其他冲突?

值得一提的是,我想通过控制器或方法来控制这种情况。

解决方法

如果您定义了主键,则不可能有重复的主键(但尝试插入具有已存在 id 的行会产生错误)。

如果您真的不允许使用触发器(老实说,这听起来像是一个相当随意且适得其反的要求),您可以创建一个序列(又名生成器),并在插入语句中使用 {{ 3}} 表达式。

因此,创建一个序列(每个表一个):

create sequence sq_mytable;

并在插入时使用它:

insert into mytable (id,column1,column2) 
  values (next value for sq_mytable,'value1','value2');