插入EFCore中的表时如何运行子查询

时间:2019-06-12 10:59:39

标签: postgresql .net-core entity-framework-core

我在orderid integer表的Postgres表中有一个Orders列,它不是主键。并且考虑到orderid的最大值并将其加1来自动递增它的逻辑。

对此的一种解决方案是在数据库层中创建一个函数,并将其设置为该列的默认值。但是,由于这使我们耦合到数据库层,因此我们正在考虑与EF相关的事物。我们无法将SQL作为默认值传递给orderid,因为postgres给出了错误。我们也可以将其设为自动递增值,但我们不想这样做,因为逻辑可能会改变。

我们想要的是一种运行此子查询并自动将值生成到orderid的方法。

1 个答案:

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