EF Core 中通过 HasCollation 显式配置字段排序规则,用于控制字符串比较与排序行为(如大小写、重音敏感性),适用于多语言、大小写敏感校验、拼音排序及与 SQL Server 表结构对齐等场景。
EF Core 中配置字段排序规则(Collation),主要用于控制字符串列的比较、排序行为,比如大小写敏感性、重音处理、Unicode 支持等。尤其在 SQL Server 中,HasCollation 是 Fluent API 提供的关键方法,它能精准指定某列使用的排序规则,比数据库默认更灵活。
当你的应用涉及多语言数据、需要区分大小写搜索(如 admin ≠ Admin)、或希望避免 ORDER BY 结果因数据库默认排序规则不一致而波动时,就需要主动配置。例如:
在 OnModelCreating 中为字符串属性调用 HasCollation:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(u => u.Username)
.HasCollation("SQL_Latin1_General_CP1_CS_AS"); // 区分大小写 + 区分重音
} 注意:该配置只影响该列的排序和比较逻辑,不影响存储编码(如是否为 Unicode)。若同时需要 UTF-8 存储,还需配合 .IsUnicode(false) 和 .UseCollation("..._UTF8")(仅限 SQL Server 2019+)。
以下规则后缀含义需留意:
_CI:Case Insensitive(不区分大小写);_CS:Case Sensitive(区分大小写)_AI:Accent Insensitive(不区分重音);_AS:Accent Sensitive(区分重音)_UTF8:启用 UTF-8 编码(必须搭配 .IsUnicode(false))常用组合:
LATIN1_GENERAL_100_CI_AS_SC:推荐通用 Unicode 规则(含补充字符支持)SQL_Latin1_General_CP1_CI_AS:传统 
LATIN1_GENERAL_100_CI_AS_SC_UTF8:UTF-8 存储 + Unicode 排序(需 SQL Server 2019+)配置后生成 Migration,会体现在 CREATE TABLE 或 ALTER COLUMN 语句中。可运行 dotnet ef migrations script 查看实际 SQL 是否包含 COLLATE xxx。上线前建议在目标库执行简单测试:
SELECT * FROM Users ORDER BY Username;
观察结果是否符合预期(如 Zhang 是否排在 zhang 之后,取决于是否 CS)。
基本上就这些。不需要全局设置,按需配到具体字段即可,既安全又可控。