EF Core 使用 citext 数据类型与 postgres 对话
EF Core talking to postgres with citext datatype
我需要一些帮助。
我是 运行
.NET 核心 3.1
Npgsql.EntityFrameworkCore.PostgreSQL3.1.2
Microsoft.EntityFrameworkCore.Tools3.1.2
针对 postgres db
PostgreSQL 11.5
我们从 MSSQL 迁移到 postgres,之前这段代码有效:
_context.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailadress);
话虽如此,现在数据区分大小写,例如比较 "john.doe@mail.com" 与 "John.Doe@mail.com" 停止工作。
可以全部改成lower-strings,但是这种比较比较多,改起来需要时间。
然后我找到了 citext 来拯救,我想。
我已经更改了 table/column,然后是 .net 实体,我不太确定如何修复。
我尝试添加到实体中,基于此 link:
https://www.npgsql.org/efcore/mapping/general.html?tabs=data-annotations
[Column(TypeName = "citext")]
public string EmailAddress { get; set; }
但这并没有帮助。
我在日志中找到了这个:
执行 DbCommand [Parameters=[@__emailadress_0='?'], CommandType='Text', CommandTimeout='30']
而且我不知道我是否应该在这里期待 CommandType='citext' 。
有人对此有任何意见吗?
非常感谢!
确保将具有该类型更改的新迁移应用于您的数据库。
另一件需要考虑的事情是你的数据库使用的排序规则。我的想法是,就在您从 MSSQL 迁移到 Postgre 之后,排序规则没有被保留。
用于连接到 Postgres 数据库的用户没有设置默认架构。使用的 data/tables 不存在于数据库的默认架构集中。 preferred/default 在用户上设置模式后,连接到数据库,citext 比较开始工作。
ALTER ROLE myUser IN DATABASE myDatabase SET search_path TO mySchema;
我需要一些帮助。
我是 运行
.NET 核心 3.1
Npgsql.EntityFrameworkCore.PostgreSQL3.1.2
Microsoft.EntityFrameworkCore.Tools3.1.2
针对 postgres db
PostgreSQL 11.5
我们从 MSSQL 迁移到 postgres,之前这段代码有效:
_context.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailadress);
话虽如此,现在数据区分大小写,例如比较 "john.doe@mail.com" 与 "John.Doe@mail.com" 停止工作。
可以全部改成lower-strings,但是这种比较比较多,改起来需要时间。
然后我找到了 citext 来拯救,我想。
我已经更改了 table/column,然后是 .net 实体,我不太确定如何修复。
我尝试添加到实体中,基于此 link: https://www.npgsql.org/efcore/mapping/general.html?tabs=data-annotations
[Column(TypeName = "citext")]
public string EmailAddress { get; set; }
但这并没有帮助。
我在日志中找到了这个:
执行 DbCommand [Parameters=[@__emailadress_0='?'], CommandType='Text', CommandTimeout='30']
而且我不知道我是否应该在这里期待 CommandType='citext' 。
有人对此有任何意见吗?
非常感谢!
确保将具有该类型更改的新迁移应用于您的数据库。
另一件需要考虑的事情是你的数据库使用的排序规则。我的想法是,就在您从 MSSQL 迁移到 Postgre 之后,排序规则没有被保留。
用于连接到 Postgres 数据库的用户没有设置默认架构。使用的 data/tables 不存在于数据库的默认架构集中。 preferred/default 在用户上设置模式后,连接到数据库,citext 比较开始工作。
ALTER ROLE myUser IN DATABASE myDatabase SET search_path TO mySchema;