c# - 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' 这里或不。
有人对此有任何意见吗?
非常感谢!
解决方案
确保将具有该类型更改的新迁移应用于您的数据库。
要考虑的另一件事是数据库使用的排序规则。我认为,就在您从 MSSQL 迁移到 Postgre 之后,排序规则并没有被保留。
推荐阅读
- mysql - 创建带有提交和回滚的过程
- javascript - “未经检查的 runtime.lastError:消息端口在收到响应之前关闭。” Chrome 扩展程序
- java - guice 单个常量的多个绑定
- swift - 在三角形 CAShapeLayer 上方添加文本
- javascript - 使用异步导致:错误 [ERR_REQUIRE_ESM]: Must use import to load ES Module asyncToGenerator.js
- python - 单击提交付款按钮后,Django Stripe 付款响应无效参数
- mysql - 外键可以引用多个表吗?
- javascript - 在填写表格之前隐藏文章的其余部分
- php - php说每天都有不同的时区秒数
- go - 使用无服务框架在 API 模式下本地调试 lambda golang