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。
解决方法
手动修正迁移文件
打开生成的迁移文件,找到创建排序规则的代码段,确保对应的SQL包含完整参数:CREATE COLLATION my_collation (LOCALE = 'en-u-ks-primary', PROVIDER = 'icu', DETERMINISTIC = FALSE);保存后重新执行迁移命令。
升级依赖版本
确保Microsoft.EntityFrameworkCore和Npgsql.EntityFrameworkCore.PostgreSQL版本一致,并升级到最新稳定版(如EF Core 8.x系列),新版本通常修复了这类参数传递问题。
内容的提问来源于stack exchange,提问作者AnkitG
相关产品推荐
相关产品推荐

