【发布时间】:2022-05-13 09:01:27
【问题描述】:
我有一个 web api post 方法,可以在我的 Oracle 数据库的表中插入一个新行。我在使用作为序列值的表的主键时遇到问题。如何在实体框架中执行my_primary_key_seq.nextval?目前此代码有效,但当通过我们使用序列下一个值作为下一个主键的旧 .net 网络表单插入新行时,它将违反 PK 唯一约束。
decimal nextPK = context.FORMPPs.OrderByDescending(p => p.PPID).FirstOrDefault().PPID + 1;
item.PPID = nextPK;
context.FORMPPs.Add(item);
int result = context.SaveChanges();
【问题讨论】:
-
这并没有真正回答您的问题,但您也可以在实体的 ID 属性上放置一个属性(例如:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]),这将导致自动生成主键。然后,您可以通过调用SaveChanges()后获取实体的 ID 属性值来获取分配给新行的 ID。 -
我可以通过将 1 添加到当前最大主键来插入新行,但它也不会增加 SEQUENCE 值,因此即使当前代码有效,如果有人使用旧的 .NET webform 网站,它会因为 SEQUENCE 编号不同步而中断。
标签: .net entity-framework oracle11g sequence nextval