如何在 ASP.NET Core Web API、Entity Framework Core 和 PostgreSQL 中创建具有唯一编号的序列号服务?

问题描述 投票:0回答:1

两天前我发布了this问题,我认为我没有正确解释这个问题,所以我会尝试在这里更好地解释它。

假设我想创建一个服务,当收到请求时返回一个唯一的编号。

这个号码应该:

  • 1
  • 开始
  • 每次调用服务时都会增加
    1
  • 不应向同时请求服务的两个用户提供相同的号码
  • 当数量达到一定阈值时,数量会重置回
    1
  • 即使没有达到阈值,我也可以手动将其重置为
    1

现在我需要在 ASP.NET Core Web API、Entity Framework Core 和 Postgres 作为数据库中构建该服务。

有一个示例Python代码可以实现我所需要的:


class Numbering:
    def __init__(self):
        self.number = 0

    def get_number(self):
        self.number += 1
        return self.number

    def reset(self):
        self.number = 0

num = Numbering()

for i in range(10):
    print(num.get_number())

num.reset()
print("number has been reset")

for i in range(10):
    print(num.get_number())

现在我想创建相同的东西,但是大规模地有多个用户请求此服务,不会为两个唯一的请求提供相同的数字。

postgresql entity-framework-core asp.net-core-webapi
1个回答
0
投票

例如:

create sequence recycle_seq maxvalue 10  cycle;

create table inv_tbl(inv_no integer generated always as identity PRIMARY KEY, seq_id integer DEFAULT nextval('recycle_seq'));

insert into inv_tbl values (default, default), (default, default), (default, default), (default, default), (default, default), (default, default), (default, default), (default, default), (default, default), (default, default), (default, default);

select * from inv_tbl;
 inv_no | seq_id 
--------+--------
      1 |      1
      2 |      2
      3 |      3
      4 |      4
      5 |      5
      6 |      6
      7 |      7
      8 |      8
      9 |      9
     10 |     10
     11 |      1

上面创建的序列只会前进到 10,然后循环回到 1。显然您会想要一个更大的

maxvalue
。然后将该序列附加到
seq_id
列作为
DEFAULT
值。列
inv_no
使用
generated always as identity
创建一个
DEFAULT
,它将递增到
integer
类型允许的最大值。这意味着当插入 11 行时,
inv_no
将继续递增,而
seq_id
将在 10 处滚动回到 1。

© www.soinside.com 2019 - 2024. All rights reserved.