我使用實體框架(POCO方法)在.NET中使用'PostgreSql'。Postgresql:'uuid'的自動生成不適用於EntityFramework
我的目標是在數據庫端生成Id(uuid)的數據庫創建新記錄,並將生成的Id檢索到服務器(這種情況與SQL Server完美配合)。
我的模型看起來像:
public class MyClass
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
}
在PostgreSQL列「ID」有默認值「uuid_generate_v4()」
當我嘗試添加使用EF一個新的對象到數據庫,我得到以下錯誤:
A null store-generated value was returned for a non-nullable member 'Id' of type...
我檢查SQL查詢,其中EF發送到PostgreSQL:
INSERT INTO "public"."MyClass"("Name") VALUES ("Test");
SELECT currval(pg_get_serial_sequence('"public"."MyClass"', 'Id')) AS "Id"
第一個看起來不錯。如果我執行它,新行在DB中創建(使用新生成的ID) 第二個返回NULL,並且列的名稱是'Id bigint'。 看來,這個功能只適用於數字ID。
是否可以使它適用於'uuid'類型的自動生成列?
這是完全預期的。問題存在於PostgreSQL中,它似乎默認情況下不會生成新的UUID。然而,要求數據庫生成一個新的UUID,每個插入都會使用UUID作爲主鍵。 UUID的重點在於它們可以由客戶端生成。 – Aron
我假設你首先使用數據庫,而不是Code First EF。 – Aron
我正在使用Code-First方法。 在某些情況下,我已經存在數據庫,我必須根據數據庫結構調整我的模型(它就像DB-First方法,但我不使用設計器)。有些表包含自動生成的'uuid'主鍵,因此使用此功能看起來合乎邏輯。 解決方法是否有解決方法或一些討論可以修復? – user3653175