【问题标题】:Entity Framework Core with PostgreSQL and SEQUENCE functionality具有 PostgreSQL 和 SEQUENCE 功能的实体框架核心
【发布时间】:2021-04-20 17:34:35
【问题描述】:

我已经习惯了 SQL Server 世界,如果我想创建一个供许多会话使用的“下一个数字”表,我可能会使用某种 INT IDENTITY(1,1) AUTO INCREMENT 列单行表,并严格控制事务访问以确保每个请求 ID 的人都有唯一的下一个可用。

但是,我目前正在使用 Entity Framework Core 和 PostgreSQL,并且遇到了 SEQUENCE 和 nextval 功能。这听起来很适合这个要求,但我不清楚或不确定如果我尝试将它引入 EF Core 会发生什么。我使用数据库优先方法,并在开始时从现有表中生成所有模型。如果我需要添加一个新列,我只需将其手动添加到我的 EF 代码中,如果我需要做一些更基本的事情,比如新表,我将重新运行 db scaffold EF Core CLI 命令,将特定表引用为范围。

因为这个 'SEQUENCE' 表 - 对于像我这样的 SQL 服务器人来说 - 似乎是特殊的 PostgreSQL 巫术,谁能解释一下如果我尝试从数据库中构建这个表会是什么样子?它会显示为普通的表模型/实体吗? 是否需要任何特别的东西,因为我希望能够从该表中选择以获得下一个可用的数字(有时来自多个连续快速的会话)?

【问题讨论】:

    标签: c# postgresql entity-framework sequence


    【解决方案1】:

    Postgres 序列类似于 Oracle。 oracle 文档总结如下:

    https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm#ADMIN11793

    序列是多个用户可以从中生成唯一整数的数据库对象。序列生成器生成序列号,可以帮助自动生成唯一的主键,并协调跨多行或多表的键。

    如果没有序列,则只能以编程方式生成序列值。可以通过选择最近产生的值并增加它来获得一个新的主键值。该方法在事务过程中需要加锁,导致多个用户等待主键的下一个值;这种等待称为序列化。如果开发人员在应用程序中有这样的构造,那么您应该鼓励开发人员用对序列的访问来替换它们。序列消除了序列化并提高了应用程序的并发性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2021-12-04
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多