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

Postgres与Entity Framework Core不区分大小写排序规则问题

PostgreSQL + EF Core 排序规则迁移报错解决

问题场景

通过EF Core Model Builder配置自定义排序规则:

modelBuilder.HasCollation("my_collation", locale: "en-u-ks-primary", provider: "icu", deterministic: false);

modelBuilder.UseCollation("my_collation");

迁移文件成功生成,但执行迁移时抛出异常:

System.AggregateException: One or more errors occurred. (42P17: parameter "locale" must be specified)
 ---> Npgsql.PostgresException (0x80004005): 42P17: parameter "locale" must be specified
   at Npgsql.Internal.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|215_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)

 Exception data:
    Severity: ERROR
    SqlState: 42P17
    MessageText: parameter "locale" must be specified
    File: collationcmds.c
    Line: 244
    Routine: DefineCollation

原因分析

EF Core生成的迁移SQL中,CREATE COLLATION语句未正确携带locale参数,导致PostgreSQL执行时校验失败。这通常是EF Core与Npgsql驱动版本不兼容,或是对应版本存在参数传递的bug。

解决方法

  1. 手动修正迁移文件
    打开生成的迁移文件,找到创建排序规则的代码段,确保对应的SQL包含完整参数:

    CREATE COLLATION my_collation (LOCALE = 'en-u-ks-primary', PROVIDER = 'icu', DETERMINISTIC = FALSE);
    

    保存后重新执行迁移命令。

  2. 升级依赖版本
    确保Microsoft.EntityFrameworkCore和Npgsql.EntityFrameworkCore.PostgreSQL版本一致,并升级到最新稳定版(如EF Core 8.x系列),新版本通常修复了这类参数传递问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:55:10