我在orderid integer
表的Postgres
表中有一个Orders
列,它不是主键。并且考虑到orderid
的最大值并将其加1来自动递增它的逻辑。
对此的一种解决方案是在数据库层中创建一个函数,并将其设置为该列的默认值。但是,由于这使我们耦合到数据库层,因此我们正在考虑与EF
相关的事物。我们无法将SQL
作为默认值传递给orderid
,因为postgres
给出了错误。我们也可以将其设为自动递增值,但我们不想这样做,因为逻辑可能会改变。
我们想要的是一种运行此子查询并自动将值生成到orderid
的方法。
答案 0 :(得分:0)
我假设您要在此处实现的是维护一个单独的非主键,该键自动递增的唯一ID是数字。您可以使用序列来实现。
1)通过流畅的API创建序列
2)设置列以使用序列中的下一个值
3)确保在测试之前创建并运行迁移。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasSequence<int>("OrderNumbers")
.StartsAt(1000)
.IncrementsBy(1);
modelBuilder.Entity<Order>()
.Property(o => o.OrderNo)
.HasDefaultValueSql("nextval('\"OrderNumbers\"')");
}