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

.NET EF迁移报错‘no schema has been selected to create in’排查求助

PostgreSQL EF Code-First 模式问题排查要点
  • 统一Schema名称大小写
    PostgreSQL默认对未加引号的标识符会自动转为小写存储,你代码中HasDefaultSchema用的是小写booksstore,但ToTable指定的是大小写混合的BooksStore,这可能导致EF生成的SQL与数据库实际schema不匹配。建议统一配置,若数据库中schema是大小写混合的名称,需用引号包裹:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.HasDefaultSchema("\"BooksStore\"");
        builder.Entity<BookEntity>().ToTable("Books", schema: "\"BooksStore\"");
    
        base.OnModelCreating(builder);
    }
    
  • 检查EF迁移脚本
    执行Add-Migration InitialCreate生成迁移,查看迁移文件中的SQL语句,确认创建表的语句是否指向BooksStore schema;也可执行Update-Database -Script生成完整SQL脚本,手动验证schema部分是否正确。

  • 验证连接的实际搜索路径
    用连接账号登录PostgreSQL(如pgAdmin),执行SHOW search_path;,确认搜索路径包含BooksStore。若未生效,可手动设置用户默认搜索路径:

    ALTER ROLE postgres SET search_path TO "BooksStore", public;
    

    设置后重新连接数据库测试。

  • 确认Schema实际存在
    执行以下SQL查询数据库中的schema列表,确认BooksStore(注意大小写)已存在:

    SELECT schema_name FROM information_schema.schemata;
    

    若不存在,先创建schema:

    CREATE SCHEMA "BooksStore";
    
  • 验证权限有效性
    手动执行权限授予语句确保生效,然后尝试手动创建表验证:

    GRANT USAGE, CREATE ON SCHEMA "BooksStore" TO postgres;
    CREATE TABLE "BooksStore".test(id INT);
    

    若能成功创建表,说明权限无问题;若失败,需排查角色权限配置。

  • 检查EF Core版本兼容性
    确认使用的Npgsql.EntityFrameworkCore.PostgreSQL版本与EF Core版本匹配,旧版本可能存在schema支持bug,建议升级至最新稳定版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:08:10