簡體   English   中英

具有 PostgreSQL 和 SEQUENCE 功能的實體框架核心

[英]Entity Framework Core with PostgreSQL and SEQUENCE functionality

我習慣了 SQL 服務器世界,如果我想創建一個供許多會話使用的“下一個數字”表,我可能會在單行表中使用某種 INT IDENTITY(1,1) AUTO INCREMENT 列,並且只需嚴格控制事務訪問,以確保每個要求提供 ID 的人都能獲得唯一的下一個可用 ID。

但是,我目前正在使用 Entity Framework Core 和 PostgreSQL,並且遇到了 SEQUENCE 和 nextval 功能。 這聽起來很適合這個要求,但我不清楚或不確定如果我嘗試將此表引入 EF Core 會發生什么。 我使用數據庫優先方法,並在開始時從現有表中生成所有模型。 如果我需要添加一個新列,我只需將其手動添加到我的 EF 代碼中,如果我需要做一些更基本的事情,比如新表,我將重新運行 db scaffold EF Core CLI 命令,將特定表引用為范圍。

因為這個 'SEQUENCE' 表 - 對於像我這樣的 SQL 服務器人來說 - 看起來像是特殊的 PostgreSQL 巫毒,誰能解釋如果我嘗試從數據庫中搭建這個表會是什么樣子? 它會顯示為普通的表模型/實體嗎? 是否需要任何特別的東西,因為我希望能夠從該表中獲取 select 以獲取下一個可用數字(有時來自多個快速連續的會話)?

Postgres 序列類似於 Oracle 的序列。 oracle 文檔總結如下:

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

序列是多個用戶可以從中生成唯一整數的數據庫對象。 序列生成器生成序列號,這有助於自動生成唯一的主鍵,並協調跨多行或多表的鍵。

如果沒有序列,則只能以編程方式生成順序值。 可以通過選擇最近產生的值並增加它來獲得一個新的主鍵值。 這種方法在事務過程中需要一個鎖,導致多個用戶等待主鍵的下一個值; 這種等待稱為序列化。 如果開發人員在應用程序中有這樣的結構,那么您應該鼓勵開發人員用對序列的訪問來替換它們。 序列消除了序列化並提高了應用程序的並發性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM