问题描述
有一种方法可以使用生成器将新行插入到 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');