如何配置 Entity Framework 以允许数据库为 PostgreSQL (npgsql) 生成 uuid?

How do I configure Entity Framework to allow database-generate uuid for PostgreSQL (npgsql)?

我正在更新我们的 dotnet 核心项目以在后端使用 PostgreSQL 而不是 Microsoft SQL 服务器,并且遇到了两个表使用 GUID 作为数据类型的情况。

错误

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Property CommentID on type is a database-generated uuid, which requires the PostgreSQL uuid-ossp extension. Add .HasPostgresExtension("uuid-ossp") to your context's OnModelCreating.

经过一些谷歌搜索后,我意识到我必须启用 uuid 扩展(不确定这是否可以以某种方式自动执行),然后在 pgAdmin 中成功生成了一个 uuid。

CREATE EXTENSION "uuid-ossp";
SELECT uuid_generate_v4();

不幸的是,我的 dotnet 项目仍在抱怨同样的错误。我在错误中看到它说 add .HasPostgresExtension("uuid-ossp") to OnModelCreating 我已经在几个地方尝试过但似乎无法弄清楚具体应该在哪里被添加。

按照 Shay 的说明 - 更新到最新版本的 Npgsql 后,uuid 扩展错误现在消失了。以下是 OnModelCreating 的片段,供其他人试用:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.HasPostgresExtension("uuid-ossp");
    }