首页 > 解决方案 > EF Core 使用 citext 数据类型与 postgres 对话

问题描述

我需要一些帮助。
我正在 针对 postgres db PostgreSQL 11.5 运行
.NET Core 3.1
Npgsql.EntityFrameworkCore.PostgreSQL 3.1.2
Microsoft.EntityFrameworkCore.Tools 3.1.2

我们从 MSSQL 迁移到 postgres,之前这段代码可以正常工作:

_context.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailadress);

话虽如此,现在数据区分大小写,例如比较“john.doe@mail.com”和“John.Doe@mail.com”停止工作。可以将所有更改为较低的 -strings,但由于此类比较很多,因此需要一些时间来更改它。
然后我找到了 citext 来救援,我想。
我已经更改了表/列,然后是 .net 实体,我对如何修复有点不安全。

我尝试根据以下链接添加到实体: https ://www.npgsql.org/efcore/mapping/general.html?tabs=data-annotations

[Column(TypeName = "citext")]
public string EmailAddress { get; set; }

但这没有帮助。我在日志中找到了这个:
Executing DbCommand [Parameters=[@__emailadress_0='?'], CommandType='Text', CommandTimeout='30']
我不知道我是否应该期待 CommandType='citext' 这里或不。

有人对此有任何意见吗?
非常感谢!

标签: c#postgresql.net-corenpgsqlef-core-3.1

解决方案


确保将具有该类型更改的新迁移应用于您的数据库。

要考虑的另一件事是数据库使用的排序规则。我认为,就在您从 MSSQL 迁移到 Postgre 之后,排序规则并没有被保留。


推荐阅读