You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在Supabase(PostgreSQL)中使用Entity Framework Core的问题

解决EF Core迁移Supabase PostgreSQL超时问题

可能的解决方案:

1. 调整连接字符串超时参数

Supabase远程连接存在网络延迟,默认30秒命令超时不足以让EF确认操作结果,修改连接字符串增大超时值:

Host=[hostname];Port=6543;Database=postgres;Username=postgres.[my_username];Password=[my_password];CommandTimeout=120;Timeout=60;Keepalive=30
  • CommandTimeout:设置命令执行超时时间(单位:秒)
  • Timeout:设置连接建立超时时间(单位:秒)
  • Keepalive:保持连接的心跳间隔(单位:秒)

2. 手动处理迁移历史表

既然__EFMigrationsHistory表已创建,先通过PGAdmin查询该表是否存在对应迁移记录:

SELECT * FROM "__EFMigrationsHistory";
  • 如果存在目标MigrationId,执行以下命令标记本地迁移为已应用:
    dotnet ef migrations mark applied [你的MigrationId]
    
    之后再重新运行dotnet ef database update。

3. 适配Npgsql版本

当前使用的Npgsql.EntityFrameworkCore.PostgreSQL 7.0.18与PostgreSQL 15可能存在兼容性问题,尝试降级到7.0.10版本,确保所有EF Core相关包版本一致:

  • 卸载现有包:
    dotnet remove package Npgsql.EntityFrameworkCore.PostgreSQL
    
  • 安装指定版本:
    dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 7.0.10
    

4. 手动创建迁移历史表

先通过PGAdmin手动创建__EFMigrationsHistory表,跳过EF自动创建步骤:

CREATE TABLE "__EFMigrationsHistory" (
    "MigrationId" character varying(150) NOT NULL,
    "ProductVersion" character varying(32) NOT NULL,
    CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId")
);

执行完成后再运行dotnet ef database update,EF会直接写入迁移记录而非重复创建表。

5. 检查Supabase网络策略

确认Supabase控制台的数据库网络限制允许你的IP访问:

  • 进入Supabase项目 -> Database -> Network restrictions
  • 添加当前机器的公网IP,或暂时设置为"0.0.0.0/0"允许所有IP测试(测试完成后记得改回)

内容的提问来源于stack exchange,提问作者fungaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:05:09